【问题标题】:String object in javajava中的字符串对象
【发布时间】:2015-07-26 10:22:00
【问题描述】:

我们知道String 是不可变的,这意味着每次都会创建一个新实例。

我的问题是,如果我写:

System.out.println("Java"+"is"+"programming");

那么池中创建了多少对象?

【问题讨论】:

  • 当这段代码被编译时,它被转换成一个单一的字符串对象。尝试反编译此代码以查看此内容。
  • which means a new instance is created every time 这不是真的

标签: java string object immutability


【解决方案1】:

您的示例将在字符串池中创建单个字符串对象。

之后,如果你这样做:

String x = "Javaisprogramming";

它仍然会指向字符串池中的同一个对象。你可以阅读更多here

【讨论】:

    【解决方案2】:

    您的示例将创建一个字符串对象。这是throughoutJavadocumentation

    按照我的理解,Java 仅在最初创建新字符串时将它们添加到字符串池中。所以,

    String str1 = "hello";
    

    将是池中的单个字符串。

    会的

    String str2 = "Java" + "is" + "cool";
    

    【讨论】:

    • 这个对象是在字符串池中创建还是在字符串池外创建,
    【解决方案3】:

    您的示例将仅创建“单个”字符串

    String x = "Javaisprogramming";
    

    因为 '+' 是 java 中的字符串连接运算符(它在内部调用 append()),所以当您调用 System.out.println("Java"+"is"+"programming"); 时,编译器会从连接中创建一个字符串对象并使用 println() 方法发送它。

    有关“+”运算符的更多信息,请参阅answer

    【讨论】:

      猜你喜欢
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 2021-12-31
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多