1 ,基本数据类型 和 基本数据类型 比较
基本数据类型存储在栈中,所以使用 == 比较的都是栈中值,结果相同。
//字符串存储在常量池,常量池在方法区中
String AA = "森!!仔";
String BB = "森!!仔";
int q = 5,w = 5;
if (AA == BB) {
System.out.println(AA == BB); //true
System.out.println(q == w); //true
}
System.out.println(AA.equals(BB)); //true
//TODO equals 不能比较基本数据类型
2,基本数据类型 和 引用数据类型 比较
引用数据类型的值存储在堆中,栈中存放的是引用数据类型的地址值。
使用== 进行字符串比较时,比较结果始终是false;
使用 equals 进行字符串比较时,重写方法后,通过引用数据类型的地址值获取堆中的值与基本数据类型比较,结果为true。
8大类型 == 和 equals 比较前会进行自动拆装箱,统一数据类型后比较。
String z = "森!!仔";
String s = new String();
s = "森!!仔"; //TODO 这里不一样哦 s 相当于 String s = "森!!仔";
String h = new String("森!!仔"); //new后的对象存储在堆
int f = 5;
Integer ff = 5;
System.out.println(h == z); //false
System.out.println(s == z); //true
System.out.println(h == s); //false
System.out.println(h.equals(z)); //true
System.out.println(h.equals(s)); //true
System.out.println((f == ff) + " int和Integer == 比较"); //自动拆装箱 //true
System.out.println(ff.equals(f)+" int和Integer equals 比较"); //true
3,引用数据类型 和 引用数据类型 比较
使用 == 比较时字符串时 ,两个引用数据类型内容相同,对象不是同一个,则地址值不同,比结果为false;同一个对象在两个地方引用,地址值相同,比较结果为true;
使用 重写 后的equals比较字符串时,获取两引用数据类型的内容进行比较,结果为true。
String a = new String("森!!仔");
String b = new String("森!!仔");
String c = a,d = a;
Integer o = 5,t = 5;
System.out.println(d == c); //引用的是同一地址值 //true
System.out.println(a == b); //false
System.out.println(a.equals(b)); //true
System.out.println(o == t); //true
System.out.println(o.equals(t)); //true
提示,使用 equlas 比较 null 和 “ ” 会出现 空指针 异 常
String aa = null;
String bb = "";
System.out.println(aa == bb); //false
try {
System.out.println(aa.equals(bb)); //报错
}catch (Exception e) {
e.printStackTrace();
if(aa == null && aa.equals("")){ //报错
System.out.println("通常判断数据是否为 “” 或 null 可以这样");
}
}
人无完人,接受指点与反驳,森!!仔