Чем отличаются задания строк в виде String x = "qwerty"; String y = "qwerty"; — от — String a = new String ("qwerty"); String b = new String ("qwerty");
При сравнении результаты разные...
String a = new String ("qwerty");
String b = new String ("qwerty");
if (a==b) {System.out.println("a==b");} else {System.out.println("a!=b");}
// a!=b
String x = "qwerty";
String y = "qwerty";
if (x==y) {System.out.println("x==y");} else {System.out.println("x!=y");}
//x==y
Anonymous #2473083
19 уровень
String x = "qwerty"; String y = "qwerty"; — равны, почему не равны — String a = new String ("qwerty"); String b = new String ("qwerty");
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Павелстудент на стероидах в Java Syntax Pro beta
27 ноября 2020, 17:07решение
Более того, строки даже созданые как new String("йцукен") можно вернуть в пул:
+1
kavasak119999Backend Developer в Raiffeisen
27 ноября 2020, 16:43
== является эталонным сравнением, т.е. оба объекта указывают на одну и ту же ячейку памяти.
.equals() оценивает сравнение значений в объектах ("kot".equals("kot")) // true
Так же советую ознакомиться с String Pool :
Вот где можно о нём узнать - https://javadevblog.com/chto-takoe-pul-strok-v-java.html
+1
Ksenia VolkovaJava Developer в DXCMaster
27 ноября 2020, 16:37
В случае new String ("qwerty") строка будет создана вне пула строк (String pool).
А когда пишешь просто String x = "qwerty", то сначала будет проверен пул, и если там есть такая строка, то переменная получит ссылку на эту строку из пула, а новый объект создан не будет.
Можно почитать, например, тут - https://javarush.com/quests/lectures/questsyntaxpro.level09.lecture05
+2