【问题标题】:When should I use String s = new String("Hello World")? [duplicate]什么时候应该使用 String s = new String("Hello World")? [复制]
【发布时间】:2012-06-05 11:31:54
【问题描述】:

可能重复:
What is the purpose of the expression “new String(…)” in Java?

我知道应该避免使用String s = new String("Hello World"),因为它会为“Hello World”创造额外的空间,这在大多数情况下是不必要的。

解释为什么应该避免String s = new String("Hello World")的相关问题在这里:

What is the difference between "text" and new String("text")?

但是我们什么时候需要使用String s = new String("Hello World"),而不是String s = "Hello World"?这是我遇到的一个面试题。

如果在大多数情况下应该避免使用String s = new String("Hello World"),为什么 Java 仍然允许这样做?

【问题讨论】:

  • 同样的问题适用于new Boolean(true),而您可以使用Boolean.TRUE。
  • 有很多琐碎的代码,您不会期望 Java 会阻止您编写。 int a = 5 + 1 - 1; 很傻,但合法。
  • @Damien_The_Unbeliever:那个特定的例子由编译器处理(而new String("s");)不是。
  • @Thilo - 这可以说是赞成允许这样的构造(与希望Java禁止完全合法的表达的OP立场相反)。

标签: java string


【解决方案1】:

1) 字符串 s = "文本"; 此语法将为堆中的“文本”分配内存。并且每次您将此“文本”分配给其他变量时,它将每次返回相同的内存引用。 为 Exp -

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

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

将打印 - 是的

但是
字符串 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");
   }

将打印 - 否

【讨论】:

  • 对不起,你能举一个具体的例子说明我什么时候应该使用新字符串吗?我知道它背后的理论,只是缺乏例子
猜你喜欢
  • 2014-07-24
  • 2017-10-27
  • 2013-11-25
  • 2013-12-03
  • 2014-05-01
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多