- 基本类型的赋值是直接的,例如a=b,如果b是基本类型,那么赋值 *** 作会将b的值赋值一份给变量a,若a的值发生变化不会影响b。
- 如果是对象赋值,我们赋值的只是引用,两者指向堆中的对象还是同一个,相当于给堆中的对象起了一个别名。
- !=和==比较是对象的引用,要比较对象中内容,需要复写equals()方法,equals()方法默认是比较引用。
- 基本类型有所不同,比较值。
- 基本类型的包装类也有所不同 ,有缓冲(看下面的例子)。
// 随便一个类 class Apple{ int i; Apple(int i){ this.i = i; } } public class Equivalence { public static void main(String[] args) { Integer n1 = 100; Integer n2 = 100; System.out.println(n1==n2); // 输出True Apple a1 = new Apple(100); Apple a2 = new Apple(100); System.out.println(a1==a2); // 输出False Integer b1 = 128; Integer b2 = 128; System.out.println(b1==b2); // 输出false } }
Integer类有所不同的是,这里n1和n2都是对象的引用,引用对象的内容是一样的,使用==比较输出是True,这是因为 Integer 内部维护着一个 IntegerCache 的缓存,默认缓存范围是 [-128, 127],所以 [-128, 127] 之间的值用 == 和 != 比较其实就是对象中内容的比较。
其他包装类的例子Character c1 = 'a'; Character c2 = 'a'; System.out.println(c1==c2); // true Byte d1 = 100; Byte d2 = 100; System.out.println(d1==d2); // true Short s1 = 100; Short s2 = 100; System.out.println(s1==s2); // true基本类型的例子
int z1 = 1000; int z2 = 1000; System.out.println(z1==z2); // true Integer b1 = 128; Integer b2 = 128; System.out.println(b1==b2); // 输出false
int不像Integer,超过128(缓冲)就输出false,int这些基本类型比较的是值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)