String x = new String("xyz");
String y = "abc";
x = x + y;
Run Code Online (Sandbox Code Playgroud)
String在此代码中将创建多少个对象?
String x = new String("xyz");
Run Code Online (Sandbox Code Playgroud)
有一个:"xyz"是一个实习字符串.
有两个:new String("xyz").
String y = "abc";
Run Code Online (Sandbox Code Playgroud)
有三个:"abc"是一个实习字符串.
x = x + y;
Run Code Online (Sandbox Code Playgroud)
有四个.由于字符串是不可变的,因此必须创建第三个字符串对象:new String("xyzabc").
可能存在第五个对象,因为编译器可以使用StringBuilder来执行字符串连接.
StringBuilder s = new StringBuilder(x);
s.append(y);
x = s.toString();
Run Code Online (Sandbox Code Playgroud)
加载类时,会创建两个String对象(最有可能),每个String对象一个.这是一次性的事情......
每次运行代码时,都会创建两个字符串:
将new String("xyz")创建一个新的字符串,它的状态是一样的"xyz"文字.
String连接x + y创建第二个新String.
应该注意的是String y = "abc";,不会创建新的String.相反,它将对现有String的引用分配给y.实际上,它是对加载类时创建的文字的String对象的引用.
实际上,如果向下钻取,char[]将为每个创建的String对象创建一个数组.字符串连接可能涉及创建临时StringBuilder对象.这两个都是实现细节.
加载类也可能不会导致创建新的String对象.确实,字符串文字将由字符串池中的字符串对象表示,但是如何发生的确切过程是实现细节......并且它不一定需要调用String.intern新创建的String对象.
另一个答案是ZERO对象被创建.这只是Java源代码,除非您编译并运行它,否则Java源代码不会创建对象.(多田!!)
| 归档时间: |
|
| 查看次数: |
1393 次 |
| 最近记录: |