我刚刚开始学习Java并且遇到了这个问题:
String s = "Hello";
String s1 = "Hello";
if(s.equals("Hello") && s.equals(s1))
{
System.out.println("Equal");
}
Run Code Online (Sandbox Code Playgroud)
if语句中的第一个条件将字符串文字s与字符序列进行比较,其中第二个语句s与另一个字符串文字进行比较s1.两种比较都证明是正确的.
我的理解是,s将持有参考,"Hello"并且同样如此s1.作为s并且s1保持引用"Hello",它们可以被比较并且总是相等的(因为'公共字符串池').
我的问题是:如何s将包含引用的内容与实际的字符串"Hello"序列进行比较?有没有任何逻辑,或者它只是处理内存引用的实现,然后比较两个?
如果我的理解错误,请纠正我...
我的问题是:如何将包含引用的's'与实际的字符串"Hello"(一个字符序列)进行比较?
"Hello"是不是一个字符序列.这是一个String.(String确实实现了CharSequence界面,但这不是一回事.)所以当你使用equals或者==你正在比较String实例时,不是一些特殊的东西.甲String文字是一个String(完整的对它的引用,其中文字写在所述源).
它起初看起来好像你感到困惑equals和==.重新阅读,我不确定你是谁,但以防万一:equals比较两个对象的等价性; 如果两个对象是Strings,则返回true它们具有相同的字符序列.==比较两个对象引用并评估true它们是否指向同一个对象.==有时true看起来是不同的String对象,因为String文字是隐式intern'd(放在一个公共池中并从中重用)来节省内存,因此两个独立但等效的文字实际上最终会引用同一个对象.永远不要依赖它.使用==比较Strings是几乎总是一个错误(如果它不是案件都非常边缘的情况下).使用equals.
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |