如果我写这段代码:
String s = new String("TestString");
我理解 s 如何引用动态创建的字符串。 s 本身不是一个对象,而是引用一个对象。
但我无法弄清楚这意味着什么:
String s = "TestString";
Q1。如果它是某种原始数据类型我会理解,但这对于类类型意味着什么?
第二季度。用户创建的类也允许这种初始化吗?
Java 级别:初级
最佳答案
Q1. If it would have been some primitive data type I would understand, but what does this signify for a class type ?
在本例中,"TestString"
是字符串文字。字符串文字也用作对String
实例的引用。这是根据语言规范 §3.10.5 。因此,在您的特定情况下 "TestString"
是对 String
实例的引用,并且您将相同的引用分配给变量 s
.
现在,关于由文字引用的String
有一些相当特殊的东西。具有相同值(逻辑上,作为字符串)的两个字符串文字始终引用 String
的同一个实例。这是由于字符串文字的“interning ”造成的。
但是,当你说
String s = new String("TestString");
仍然是“TestString”
引用String
的实例,实际上引用字符串实习池中的实例,但它是 s
引用同一个字符串的情况并非如此。相反,s
被初始化为等于 "TestString"
,但它实际上是一个新引用。即:
String s = new String("TestString");
String t = "TestString";
System.out.println(s == t);
这将打印false
。
Q2. Is this kind of initialization allowed for user created classes as well ?
没有。
关于java - 使用文字初始化类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17677782/