【问题标题】:How to know how many objects will be created with the following code?如何知道使用以下代码将创建多少个对象?
【发布时间】:2010-10-03 18:04:23
【问题描述】:

当涉及到字符串时,我对对象的情况有点困惑,所以想知道使用以下代码将创建多少个对象,以及关于字符串池和堆的字符串对象创建的一些解释。

 public static void main(String[] args) {

    String str1 = "String1";

    String str2 = new String("String1");

    String str3 = "String3";

    String str4 = str2 + str3;

    }

【问题讨论】:

    标签: java


    【解决方案1】:

    将创建 4 个对象。

    两个音符:

    • new String("something") 总是创建一个新对象。字符串文字 "something" 只为所有出现创建一个对象。最佳做法是永远不要使用 new String("something") - 实例化是多余的。
    • 两个字符串的串联转换为StringBuilder.append(first).append(second).toString(),所以这里又创建了一个对象。

    【讨论】:

    • 第二点在这种情况下是正确的,但如果参数是编译时常量,则变得有点困难。例如,我相信String str1 = "foobar"; String str2 = "foo" + "bar"; 只有一个实例。
    • @Bozho 下面的语句会创建多少个对象? String a="good"+"luck";3?
    【解决方案2】:

    str1、str2、str3、str4 都是 String 对象。

    str1 : "String1" 是一个字符串文字,Java 在遇到字符串文字时会创建一个 String 对象。

    str2 :当您使用 String 类的 new 关键字和构造函数时,会创建一个 String 对象

    str3 : 类似于 str1

    str4 : 连接字符串字面量,类似于 str1

    编辑:http://download.oracle.com/javase/tutorial/java/data/strings.html

    【讨论】:

    • str1str2str3str4不是对象,它们是对象引用。
    猜你喜欢
    • 2017-06-18
    • 2019-09-19
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 2019-08-22
    相关资源
    最近更新 更多