如何使用 “ ” 初始化字符串?

2022-08-31 07:21:37

如果 String 是一个像其他类一样的类,那么如何使用双引号对其进行初始化?


答案 1

Java String 是 Special 的

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

enter image description here

注意:字符串文本存储在公共池中。这有助于共享具有相同内容的字符串的存储,从而节省存储空间。 通过运算符分配的对象存储在 中,并且不会共享相同内容的存储。Stringnewheap


答案 2

Java将String视为一个特殊的类,您可以通过两种方式进行初始化

  1. 直接分配文本

    String a = "adsasdf";
    
  2. 作为其他对象使用新关键字

    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引用不同的对象,就像我们初始化任何其他对象一样。因此,与运算符相比,它们是不相等的,而它们在值上是相等的。==