Прежде всего, это не ответ, это способ получить ответ самостоятельно или объяснить ситуацию.
Слияние двух строк всегда создает новый объект строки.
Чтобы соответствовать этому, вы можете сделать одну вещь: как это было в куче и пуле памяти.
1: перейти к NetBeans:
2: написать программу так:
public class StringTest {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "World";
String str3 = new String("HelloWorld");
String str4 = str1 + str2;
String str5 = str1 + str2;
String str6 = str1.concat(str2);
String str7 = "HelloWorld";
String str8 = "HelloWorld";
System.out.println("");
}
}
3: Просто поставьте точку останова на System.out.println("");
этой строке.
4: Теперь отладьте этот код.
5: Перейдите в окно переменных (Window-> Debugging-> Variables), которое выглядитнапример:
6: щелкните правой кнопкой мыши на str8
и выберите Отметить объект ... и присвойте некоторый тегэтот объект, такой как Same Object
.
Теперь вы можете видеть, что та же строка тега также появляется на str7
как:
Который показывает, что обе ссылки str7' and
str8` являются ссылками на один и тот же объект.
7: Теперь проверьте эту вещь на str3-4-5-6
все ссылки, пометив их другой меткойНапример:
И для дальнейшего более внутреннего управления этим объектом просто посмотрите на параметр Show Refereances
, щелкнув правой кнопкой мыши имя переменной в окнах переменныхнапример:
Обновление:
- Объединение создает объекты в куче.
- Чтобы убедиться, что этот оператор выглядит , который говорит, что пул не может содержать несколько строк с одинаковым значением
- И здесь str7-8
- это упомянутый объект из пула, который отличается отstr4-5-6
, как показано на скриншоте пункта 7.
- И вы также можете подтвердить это, сравнив str5
с str7
, используя оператор ==
, если он возвращает true
, конкатенация создает объекты в пулепотому что str7
ссылаются на пул и оба ссылаются на один и тот же объект, но он вернет false, потому что оба не совпадают.