String a = "f"; //Проверяется пулл констант, создается новый объект, ссылка на объект сохраняется в переменную a
String b = "f"; //Проверяется пулл констант, берется ссылка на уже созданный объект и сохраняется в переменную b
String c = new String("f"); // Создается новый объект
String d = a; //Ссылка на объект из одного чара "f" дублируется в переменную d
d = "g";
b = "l";
System.out.println(a); // f
System.out.println(b); // l
System.out.println(c); // f
System.out.println(d); // g
String text = "Hello";
String text2 = "Hello";
text == text2 - true т.к. ссылки будут одинаковые.
String text = new String ("Hello");
String text2 = new String ("Hello");
text == text2 - false т.к. ссылки будут ссылаться на разные ячейки в памяти
我会马上回答额外的问题!)在第一种情况下,可能不会创建一个新对象,而是从常量池中拉出,而在第二种情况下,强制创建一个新对象。那是:
Java 中的字符串是一个包装器
byte[] value,可以通过进入类看到String.class在 Java 中,字符串是一种引用数据类型。但附带条件是在底层有某种称为字符串池的优化。这是因为字符串在 Java 中非常常见。
什么是字符串池?每当您创建这样的字符串时
编译器是否检查之前是否创建过这样的字符串?如果这样的行已经存在,那么您只需获得指向它的链接。如果不是,则将该行添加到池中。
以这种方式创建字符串与以前的版本没有什么不同,只是字符串“Hello”无论如何都会添加到池中,无论它是否已经存在。
由此得出一些结论: