一点java的问题

来源:百度知道 编辑:UC知道 时间:2024/05/23 15:01:51
String a = "A string";
String b = "A string";
System.out.println(a == b);
为什么结果是true?
这个和
String a = new String("A string");
String b = new String("A string");
System.out.prinln(a == b)的主要区别是什么?最好能从java声明变量的时候,VM是怎么处理这两种不一样的情况出发,谢谢:)

因为a == b 是一个判断的语句
String a = "A string";
String b = "A string";
是声明了两个 String类型的变量a b 都指向同一个地址A string
所以 当你用a == b来判断的时候,因为他们指向的是同一个地址,所以得到的判断后的值应该是true。
而String a = new String("A string");
String b = new String("A string");
是创建了两个对象和两个变量,虽然a和b的值是一样的,但是却是两个不同的对象,
而 == 是判断是否是同一个对象
.equals 十来判断值的他不管你的对象是不是一个,只要值相等就是true!
明白了么?

http://zhidao.baidu.com/question/40786694.html

1.String a = "A string";
这时JVM在栈内存中开辟一个空间存放"A string",并将a指向这个空间...
2.String b = "A string";
JVM发现在栈内存中已经存在一个"A string"的空间,将b指向该空间...

==操作符判断的是两个引用是否同一地址,所以这里a==b返回true...

3.String a = new String("A string");
JVM在堆内存中开辟一个空间存放[String("A string")]这个对象,并将a指向这个空间...
4.String b = new String("A string"