2010-03-24 6 views
0
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 

Предположим, что это будет в главной, почему выход указанного выше кодаВыход следующего кода

истинно истинно истинно ложно и не соответствует действительности истинно ложных ложных ???

+0

http://stackoverflow.com/questions/2175064/what-is-the-difference-between-assignment-and-creating-instance-of-string – Shashi

+0

Я бы не назвал, что точный дубликат Шаши , –

+0

Извините за путаницу .. Я не отмечаю этот вопрос как дубликат. Просто я предоставляю ссылку для справки. – Shashi

ответ

3

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

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

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

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

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

+0

@Kevin - -facepalm- –

+0

@Kyle Ах, да, это похоже на домашнюю работу, не так ли? Виноват. Но до тех пор, пока он изучает концепцию, верно? –

+0

спасибо тонну! Новичок в этом .. обучение каждый день .. – terrific

2

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

==, .equals(), compareTo(), and compare()

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

+0

жаль, что я понимаю это сейчас .. его == на четвертом, а не третьем. – terrific

0
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); 
    } 
} 
+0

Нет объяснений? Почему это ответ? – madth3