Java 如何知道使用以下代码将创建多少个对象?

Java 如何知道使用以下代码将创建多少个对象?,java,Java,当涉及到字符串时,我对对象的情况有点困惑,所以我想知道下面的代码将创建多少个对象,并解释关于字符串池和堆的字符串对象创建 public static void main(String[] args) { String str1 = "String1"; String str2 = new String("String1"); String str3 = "String3"; String str4 = str2 + str3; } 将创建4个

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

 public static void main(String[] args) {

    String str1 = "String1";

    String str2 = new String("String1");

    String str3 = "String3";

    String str4 = str2 + str3;

    }

将创建4个对象

注二:

  • 新建字符串(“某物”)
    总是创建一个新对象。字符串literal
    “something”
    只为所有事件创建一个对象。最佳实践是永远不要使用
    新字符串(“某物”)
    ——实例化是多余的
  • 两个字符串的连接被转换为
    StringBuilder.append(first).append(second).toString()
    ,因此在这里创建了另一个对象

str1、str2、str3、str4中的每一个都是字符串对象

str1:“String1”是一个字符串文本,Java在遇到字符串文本时创建一个字符串对象

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

str3:与str1相似

str4:串联字符串文字,类似于str1


编辑:

第二点在本例中是正确的,但如果参数是编译时常量,则会变得更加困难。例如,我相信
String str1=“foobar”;字符串str2=“foo”+“bar”只有一个实例。@Bozho以下语句将创建多少个对象<代码>字符串a=“好”+“运气”3?
str1
str2
str3
str4
不是对象,它们是对象引用。