最近面试发现基础还是挺重要的,很多时候都用习惯了一个东西,把它的一些原理什么的都忘记了,毕竟太菜了。
==是用来比较两个对象的内存地址,如果是引用相同的对象,那么它们就是在同一个内存区域中,比较的时候就是true。
在比较的时候我又发现了一个问题
Integer a=128; Integer b =128; System.out.println(a==b); Integer n=127; Integer m=127; System.out.println(n==m);
在使用这样的代码块执行出来的结果居然是false,true
后来又找到了原因Integer这个类型在常量池中的存储范围是-128到127,超过127之后会创建一个新的对象来保存这个值,m和n则分别在两个不同的对象中,所以是不相等。
如果将int替换Integer之后,执行结果是true,true,对于基本数据类型,他们是HashSet策略存储起来,所以他们的引用都是指向的同一块地址。
如果使用这样的代码块去判断
String a="128"; String b ="128"; System.out.println(a==b); String c=new String("128"); System.out.println(c==b);
执行结果是true,false
和其他基本数据类型同理,当它没有使用new的时候,它的数据是放在内存的常量池中的存储的,当它使用new之后就相当于在内存中开辟了另一个空间用来放这个对象,而==比较的是内存空间,所以是为false。
equals方法。
首先equals方法是object类一个可重写的方法,基本上所有的类都可以重写这个方法,即使是我们什么都不写,直接返回true也是可以的,但是一般情况下都是用来判断对象内的属性值是否相等