一、布尔类型Boolean的情况
在java中,装箱与拆箱中会遇到这两种情况:
Boolean flag = false;
System.out.println(flag = true);
System.out.println(flag == true);
#Output:
true
true
Boolean flag = false;
System.out.println(flag == true);
System.out.println(flag = true);
#Output:
false
true
是不是很奇怪?为什么呢
第一种,是因为先将true赋给flag,if条件句里是赋值语句,故输出为true;然后再执行flag==true时,是判断语句,由于flag已经被赋值为true,故输出结果也为true
第二种,是先if语句先判断flag是否为true,显然不是,故输出为false;然后再执行if条件句里的赋值语句,故输出结果也为true
其实这里还有一个潜在的知识点:
Boolean flag = false;
Boolean flag = Boolean.valueOf(false);
这两句是等价的。jdk1.5以后的版本引用了自动装箱与拆箱,下边的一句就是自动装箱。
Boolean flag = false; //Autoboxing
boolean flag1 = flag.booleanValue(); //unboxing
这两句分别是自动装箱(autoboxing)与拆箱(unboxing)。
什么是自动装箱呢?
Converting a primitive value (an
int
, for example) into an object of the corresponding wrapper class (
Integer
) is called autoboxing
(将一个基本类型的值转化为其对应包装类的对象就是自动装箱)
Converting an object of a wrapper type (Integer) to its corresponding primitive (int) value is called unboxing
(讲一个包装类型的对象转化为对应的基本类型就是拆箱)
二、对于整型的Integer的情况:
例:
Integer i0 = 200; //autoboxing
int i1 = i0; //unboxing
Integer i2 = 200;
System.out.println(i0 == i1);
System.out.println(i0 == i2);
System.out.println(i0.equals(i2));
Integer i3 = new Integer(200);
System.out.println(i0 == i3);
System.out.println(i0.equals(i3));
System.out.println(i1 == i3);
Integer i4 = 3;
Integer i5 = 3;
System.out.println(i4 == i5);
System.out.println(i4.equals(i5));
#Out:
true
false
true
false
true
true
true
true
false
true
false
true
true
true
true
三、字符串String的情况
== 比较对象的引用是否相同,
引用就是对象地址。
equals是对象的方法,基本上实现来比较对象自己的内容
说多了也没用,看程序
false

说多了也没用,看程序
String s1 = "a";
String s2 = "b";
String s3 = "ab";
String s4 = s1 + s2;
String s5 = "a" + "b";
String s6 = s1 + "b";
StringBuffer s7 = new StringBuffer("abc");
String s8 = s7.substring(0,2);
System.out.println(s3 == s4);//F
System.out.println(s3.equals(s4));//T
System.out.println(s3 == s5);//T
System.out.println(s3.equals(s5));//T
System.out.println(s3 == s6);//F
System.out.println(s3.equals(s6));//T
System.out.println(s4 == s6);//F
System.out.println(s4.equals(s6));//T
System.out.println(s4 == s8);//F
System.out.println(s4.equals(s8));//T
false
true
true
true
false
true
false
true
false
true
true
false
true
false
true