如何使用 “ ” 初始化字符串?
如果 String 是一个像其他类一样的类,那么如何使用双引号对其进行初始化?
Java的设计者决定在面向对象的语言中保留基元类型,而不是使所有内容都成为对象,以提高语言的性能。基元存储在调用堆栈中,这需要较少的存储空间并且操作成本更低。另一方面,对象存储在程序堆中,这需要复杂的内存管理和更多的存储空间。
出于性能原因,Java 的 String 被设计为介于基元和类之间。
例如
String s1 = "Hello"; // String literal
String s2 = "Hello"; // String literal
String s3 = s1; // same reference
String s4 = new String("Hello"); // String object
String s5 = new String("Hello"); // String object
注意:字符串文本存储在公共池中。这有助于共享具有相同内容的字符串的存储,从而节省存储空间。 通过运算符分配的对象存储在 中,并且不会共享相同内容的存储。String
new
heap
Java将String视为一个特殊的类,您可以通过两种方式进行初始化
直接分配文本
String a = "adsasdf";
作为其他对象使用新关键字
String a = new String("adsasdf");
当您想与符号进行比较时,您需要特别小心:==
String a = "asdf";
String b = "asdf";
System.out.println(a == b); // True
System.out.println(a.equals(b)); // True
String a = new String("asdf");
String b = new String("asdf");
System.out.println(a == b); // False
System.out.println(a.equals(b)); // True
这是因为在第一种情况下,对象 a 和 b 保存在称为对象的事物中,并且它们都引用同一个对象,因此它们在两个方面都是相等的。literal pool
但是在第二种情况下,a和b引用不同的对象,就像我们初始化任何其他对象一样。因此,与运算符相比,它们是不相等的,而它们在值上是相等的。==