java - 使用文字初始化类对象

标签 java string initialization

如果我写这段代码:

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/

相关文章:

java - 异常如何找到正确的 catch block

java - 为什么 Java 不告诉你哪个指针是空的?

java - 在 Eclipse Luna 中如何跳过除一个断点之外的所有断点?

java - 不确定的 ProgressBar 在对话框的一部分时不设置动画 (JavaFX 10)

python - 编辑两个 Pandas 列之间的距离

java - 如果字符串在 Java 中有一个以上的空格,如何插入一个单词?

python - 神秘的 Python 表达式

c# - 如何合并我拆分的字符串?

c++ - C++中的自动垃圾处理

c++ - 如何初始化包含opencv :matrices?的二维 vector