这两个字符串应该相等吗?

时间:2015-05-15 16:13:50

标签: java string

String s1 = "learn";
String s1 = s1+"Java";

现在s1指向"learnJava"字符串对吗?

String s2 = "learnJava";

if(s1 == s2)是假的。为什么?

s2应指向与StringConstantPool(s1)中已存在的"learnJava"相同的l_one = Label(window, text= lambda: self.entry_1.get()) l_one.grid(column = 0, row = 0)

2 个答案:

答案 0 :(得分:11)

  

s2应指向与StringConstantPool中已存在的“learnJava”相同的内容。

Nope - 除非您致电begin,否则字符串池仅用于常量字符串。

因此字符串池包含func == (lhs:StatusEvent, rhs:StatusEvent) -> Bool { return lhs.begin == rhs.begin } func < (lhs:StatusEvent, rhs:StatusEvent) -> Bool { return lhs.begin < rhs.begin } struct StatusEvent : Comparable { var begin : Int = 0 } var arr = [StatusEvent(begin:3), StatusEvent(begin:2)] let se = StatusEvent(begin:1) if find(arr,se) == nil { // not already present arr.append(se) arr.sort(<) } intern"learn" ...但"Java"引用字符串池中的字符串而不是 ,因为连接是在执行时执行的。

如果你有一个编译时常量表达式,它会有所不同:

"learnJava"

或者如果你想保持执行时间连接:

s1

一般情况下,只是不要将字符串与String s1 = "learn" + "Java"; // Constant expression String s2 = "learnJava"; System.out.println(s1 == s2); // true, guaranteed 进行比较......这几乎总是一个坏主意。

答案 1 :(得分:0)

这也是我遇到的问题 一个字母:'a'是一个原始的 角色:新角色('a')是一个对象
字符串:“a”是对象
“learnJava”!=“learnJava”的原因是它们是不同的对象 因此,为了检查两个字符串是否相等,您必须这样做:

String s1 = "learnJava";
String s2 = "learnJava";
s1.equals(s2) > true