В Java, когда мы пишемГде строковый литерал, который был принят в конструкторе сохраняется, когда мы создаем новый объект String,
String S1 = "TestString";
String S2 = "TestString";
, а затем сравнить с if(S1==S2)
, мы получаем истинное как логический результат. Объяснение тому же, что строковые константы создаются в пуле строк и, следовательно, это одна и та же строковая константа, которая здесь передается как S1, так и S2. Кроме того, если мы пишем что-то вроде
String S1 = new String("TestString");
String S2 = new String("TestString");
, а затем сделать сравнение с if(S1==S2)
, мы получаем ложные. Причина в том, что ссылки S1 и S2 различны, поскольку литералы строк создаются в куче.
Мой вопрос в том, где был строковый литерал «TestString», который был передан в созданном конструкторе? Является ли он таким же, как строковый литерал/константа? и, следовательно, должен быть создан в пуле, как это было в случае 1? если это тогда, когда мы пишем что-то вроде после двух вышеупомянутых заявлений
String S3 = "TestString";
это не должно создать новую строку буквальной и сравнение if(S1==S3)
должно дать мне верно, но это дает ложь.
Так что я не могу понять, где и когда этот строковый литерал передается в создаваемом конструкторе.
Любая помощь была бы принята с благодарностью.
== и str1.equals (str2) относятся к разным операторам/методам –