public static void main(String[] args){
one();
two();
three();
}
public static void one() {
String s1 = "hill5";
String s2 = "hill" + 5;
System.out.println(s1==s2);
}
public static void two() {
String s1 = "hill5";
int i =5;
String s2 = "hill" + i;
System.out.println(s1==s2);
}
public static void three() {
String s1 = "hill5";
String s2 = "hill" + s1.length();
System.out.println(s1==s2);
}
ВыходJava строковые литералы конкатенации
true
false
false
строковые литералы используют процесс интернирования, то почему two()
и three()
это false.I может понять в случае three()
но two()
не clear.but нужно правильное объяснение для обоих случаев.
Может кто-нибудь объяснить причину?
прочитайте этот вопрос, который я спросил http://stackoverflow.com/questions/16729045/behavior-of-string-literals-are-confusing – anshulkatta
Для удовольствия вы также можете попробовать 'two' с' final int i = 5 ; вместо этого (он будет печатать true вместо false, потому что теперь 'i' является константой). – assylias
«каждый раз, когда кто-то сравнивает строки с == разработчиком криками ...» –