Вывод следующего кода - PullRequest
0 голосов
/ 24 марта 2010
String s1 = "Amit";                 //true
String s2 = "Amit";                 //true
String s3 = new String("abcd");     //true
String s4 = new String("abcd");     //false
System.out.println(s1.equals(s2));  //true
System.out.println((s1==s2));       //true
System.out.println(s3.equals(s4));  //false
System.out.println((s3==s4));       //false

Предположим, что это в основном, почему вывод приведенного выше кода

истинно верно верно ложно и не верно верно ложно ложно ???

Ответы [ 3 ]

3 голосов
/ 24 марта 2010

Java использует «строковый литерал». Поскольку строки являются неизменяемыми объектами, нет причин, по которым две строки, инициализированные одним и тем же литералом, не могут быть одним и тем же объектом - и, как показывает вывод вашего кода, они являются одним и тем же объектом. (s1 и s2 - два имени для одного и того же места в памяти)

Причина, по которой это не так для s3 и s4, заключается в том, что вы явно выделяете новые строки и используете конструктор для их инициализации. Это означает, что они являются различными объектами, и, следовательно, они не проходят тест "==".

Другими словами,

== сравнивает, если две ссылки на объекты равны

.equals () сравнивает, если содержимое двух объектов равно, независимо от того, где они находятся в памяти.

2 голосов
/ 24 марта 2010

Я не собираюсь отвечать на ваш вопрос напрямую, так как это кажется домашним заданием, но вы ищете следующее:

==, .equals (), сравнить с () и сравнить ()

Ссылка выше обсуждает равенство содержимого строки и равенство ссылки на строку. Это то, чем является ваш вопрос по сути, и он дает отличный способ объяснить концепции.

0 голосов
/ 21 февраля 2011
public class Question {
    private int one;
    public void myMethod(int one){
        this.one = 30;
        int one1 = 12;
    }
}

class Test{
    public static void main(String[] arg){
        int one = 30;
        Question q = new Question();
        q.myMethod(one);
        System.out.println(one);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...