【问题标题】:Build a String with String Operators [duplicate]使用字符串运算符构建字符串 [重复]
【发布时间】:2015-11-09 14:33:10
【问题描述】:

在这个例子中,我认为结果是正确的。我以为变量存储在字符串池中。 答案是:返回 false 因为内存中的两个 String 对象不一样。一个直接来自字符串池,另一个来自使用字符串操作构建。

String a = "";
 a += 2;
 a += 'c';
 a += false;
 if ( a == "2cfalse") System.out.println("==");

我不明白变量 a 的存储位置

【问题讨论】:

标签: java


【解决方案1】:

好的,对此有两个回应。首先,道德上正确的,不要使用== 测试字符串,始终使用.equals().equalsIgnoreCase()

其次,确实是"a" == "a",因为字符串存储在同一个池中,正如您所说的那样。这里的问题是您附加到它。附加到一个字符串会导致它变成一个不同的字符串,它不会存储在字符串池中。字符串池只在编译时生成,由于第二个字符串是在运行时计算的,它不会匹配编译时生成的。

想象一个字符串池像这样工作:

a = "test";
b = "te";
c = "st";
d = "test";

编译器将其翻译成

sp1 = "test";
sp2 = "te";
sp3 = "st";
a = sp1;
b = sp2;
c = sp3;
d = sp1;

现在== 将检查两个变量是否引用同一个 sp。如果您运行b + c java 将不会返回并检查是否有任何 sp 与此相同。它只在编译时这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-11
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多