何时应该使用 String s = new String("Hello World")?

4
可能重复:Java 中 "new String(...)" 表达式的目的是什么? 我知道在大多数情况下应该避免使用 String s = new String("Hello World"),因为它会创建额外的空间来存放 "Hello World",这是不必要的。
关于为什么应该避免使用String s = new String("Hello World")的相关问题在这里: "text" 和 new String("text") 的区别是什么? 但是,在什么情况下需要使用String s = new String("Hello World")而不是String s = "Hello World"呢?这是我经历过的一个面试题。
如果在大多数情况下应该避免使用String s = new String("Hello World"),为什么 Java 仍然允许这样做呢?

当你可以使用Boolean.TRUE时,对于new Boolean(true)的同样问题也适用。 - Thilo
有很多琐碎的代码片段,你不会期望Java会阻止你编写。int a = 5 + 1 - 1;虽然愚蠢,但是合法的。 - Damien_The_Unbeliever
1
@Damien_The_Unbeliever:那个特定的例子由编译器处理(而new String("s");则不是)。 - Thilo
@Thilo - 这可以被认为是支持允许这种构造的一个观点(与OP想要禁止Java合法表达式的立场相反)。 - Damien_The_Unbeliever
1个回答

1

1)字符串 s =“text”; 这个语法将在堆中为“text”分配内存。每次将此“text”分配给其他变量时,它都会返回相同的内存引用。 例如 -

   String aa = "text";
   String bb = "text";

   if(aa == bb){
       System.out.println("yes");
   } else {
       System.out.println("No");
   }

会打印 - 是的

但是
String s = new String("text"); 每次都在内存中创建一个新位置,并返回一个新的引用。 例如 -

   String aa = new String ("text");
   String bb = new String ("text");

   if(aa == bb){
       System.out.println("yes");
   } else {
       System.out.println("No");
   }

将打印- 否


抱歉,您能给我一个具体的例子,说明何时应该使用“new string”吗?我知道它背后的理论,只是缺乏实际例子。 - Jackson Tale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接