public class wren
{
public static void main(String argv[])
{
String aa = "b";
String bb = "b";
System.out.println(aa == bb);
String a[] ={ "a", "b" };
String b[] ={ "a", "b" };
System.out.println(a == b);
}
}为什么一个true,一个false?
{
public static void main(String argv[])
{
String aa = "b";
String bb = "b";
System.out.println(aa == bb);
String a[] ={ "a", "b" };
String b[] ={ "a", "b" };
System.out.println(a == b);
}
}为什么一个true,一个false?
{
public static void main(String argv[])
{
String aa = "b";
String bb = "b";
System.out.println(aa == bb);
String a[] ={ "a", "b" };
String b[] ={ "a", "b" };
System.out.println(a == b);
}
}因为Java中有个叫字符串对象池的地方,就是用来存放字符串的.
String aa = "b";//这时候在字符串对象池里面就产生了一个"b",aa就指向了"b"
String bb = "b";//这个时候并不会就直接去new字符串,而是先到池里面去找,但是现在就找到了,那么bb也指向了这个地方
所以说aa和bb是指向的同一个地方,所以它们用==就是想等的
至于两个数组的比较,就根本跟前面那个不一样,比较的是b[],a[]跟上面的不一样,当然为false了
而数组则不一样,
String a[] ={ "a", "b" };
String b[] ={ "a", "b" };
这2句定义的a和b为2个数组类型的引用,分别引用不同的内存地址,而这2个内存地址里有分别存放了2个字符串常量的引用,就是a[1],a[2]和b[1],b[2]
虽然a和b引用的是不同的地址,但是a[1]和b[1]引用同一个地址,a[2]和b[2]引用同一个地址,也就是说。a[1]==b[1]是true同样a[2]==b[2]也是true