【发布时间】:2013-08-02 20:28:42
【问题描述】:
我希望在 Java 源代码中看到会发生什么 当一个变量被声明并赋值时。
我无法在 java.lang.Class 中发现这一点。
特别是看看会发生什么
String s1 = "abc";
String s2 = "abc";
String 是不可变的,因此根据 "s1 == s2" 的结果,这两个引用 - s1 和 s2 指向 同一个对象,当
String s2 = "abc";
发出,Java 正在发现对象的位置 已创建的 "abc" 并且 s1 正在引用并分配此位置 到 s2 (?)
我希望了解在 Java 中如何在幕后进行处理。
//============================================
编辑:
这里的问题是——Java 如何在其源代码中处理这个问题。
What is the Java string pool and how is "s" different from new String("s")? 正在回答这个部分。我希望在源代码中看到这一切——如果它不是那些原生代码之一。
我知道这是一个天真的问题,但没想到会有这些反应。
【问题讨论】:
-
A
String是不可变的,与 java 用于字符串文字的内部字符串池没有任何关系。 -
如果
Strings 不是不可变的,他们就不能被拘留。 -
@chrylis 是的,但仅仅因为某些东西 是 不可变并不意味着它已被拘留。 Java 可以在没有实习的情况下拥有一个不可变的字符串。事实上,这正是您使用
new String()所得到的 -
当然可以。这将是一个糟糕的想法,因为它会导致难以跟踪的错误(和安全漏洞);但完全有可能拥有“相同字符串的两个字符串常量将始终返回相同的可变
String对象”的规则。 -
@BrianRoach 哦,当然可以,但事实上
Strings 是不可变的,这使得实习成为可能......呃(@yshavit),实用。
标签: java string jvm variable-assignment