int a=10;
int b=10;
和
String aa="10";
String bb="10";
都属于值类型,用==可以得到true
如果用 String aa = new String("10")
String bb = new String("10")
System.out.println(aa==bb)
就会输出false。
后者就属于对象类型,会在内存中对比。
是对象池的问题,你的比较对象指向的都是同一个地方,所以相等。
你试试
String str1="abc";
String str2=new String("abc");
System.out.println(str1==str2);
xx==**这是逻辑表达式,返回值只有true&false ;
两变量都指向同一地址,你可以把它们实例化后再试试看。
int类型是值类型,每个值类型在存储的时候都有自己的内存,比较的时候比较的是对应内存空间存储的值。
String是引用类型,引用类型比较的时候要视采用的比较方式。
如果采用“==”,比较的是引用地址是否相同。如果使用:
String aa="10";
String bb="10";
那么这时,aa与bb实际上只创建了一个对象,只是aa和bb都指向同一个引用。因此比较结果为真。如果此时改变aa或者bb中任意一个,那么这时才创建第二个对象。
如果使用equals,那么比较的是对应对象的值。
如:
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a=10;
int b=10;
System.out.println(a==b);
String aa="10";
String bb=new String("10");
System.out.println(aa==bb);
System.out.println(aa.equals(bb));
String a1=new String("123");
String a2=new String("123");
System.out.println(a1==a2);
System.out.println(a1.equals(a2));
}
}
那么结果将是:
true
false
true
false
true