У меня есть два вопроса:
public static void main(String[] args) {
String s1 = "bla";
String s2 = "b" +"l" + "a";
String s3 = "b".concat("l").concat("a");
if(s1 == s2)
System.out.println("Equal");
else
System.out.println("Not equal");
if(s1 == s3)
System.out.println("Equal");
else
System.out.println("Not equal");
}
-
Почему
s1
иs2
указывают на один и тот же объект, тогда какs1
иs3
нет? (Нет использования ключевого словаnew
). -
Если я получаю строку от пользователя и добавляю к вышеуказанному коду эти строки:
BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); String name=in.readLine(); if(name.equals("test")) s1 = s1 + "xyz";
Если пользователь входит
xyz
, программа будет печататьNot equal
, когда пользователь вводит другую вещь, программа выводитEqual
. Означает ли это, что пул изменяется через выполнение всей программы? Оптимизатор работает во время компиляции и продолжает работать вruntime
?