1.Integer == 的使用
package com.test;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int i1 = 10;
Integer i2 = 10;
Integer i3 = new Integer(10);
Integer i4 = new Integer(10);
Integer i5 = 10;//new一定新建一个对象,直接赋值则不一定
System.out.println("i1==i2:"+(i1==i2));//true, int没有在堆中开辟内存,他在栈中的值就是10,Integer与int比较的是值,所以true,同下
System.out.println("i1==i3:"+(i1==i3));//true
System.out.println("i3==i4:"+(i3==i4));//false, i3与i4引用的是对象,比较的是栈的值,栈的值存放的是堆得地址,它们是两个对象显然地址不一样,所以false,同下
System.out.println("i2==i3:"+(i2==i3));//false
System.out.println("i2==i5:"+(i5==i2));//true, 赋值之前,会去内存中查找有没有这个值,若有则赋予给i5, 没有才会去开辟新的内存
System.out.println("i2==1:" + (i2==10));//true
System.out.println("i3==1:" + (i3==10));//true
System.out.println("i1==1:" + (i1==10));//true
}
}
2.String == 的使用
package com.test;
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 = "hello";
String s2 = "hello";//赋值给s2的时候,会去内存中字符串缓冲池查看是否已经存在了,如已经存在,则将这个地址赋予s2,没有则开辟新的内存
String s3 = new String("hello");
String s4 = new String("hello");
String s5 = "hell" + "o";
String s6 = s1 + "";
System.out.println("s1==s2:" + (s1==s2));//true
System.out.println("s3==s4:" + (s3==s4));//false
System.out.println("s1==s3:" + (s1==s3));//false
System.out.println("s1==s5:" + (s1==s5));//true
System.out.println("s6==s1:" + (s6==s1));//false
System.out.println("s6.equals(s1):" + (s6.equals(s1)));//true, string对象比较最好使用equals
}
}