在java中==和equals()的区别
(1)首先 == 是java提供的等于比较运算符,用来比较两个变量指向的内存地址是否相同;而equals()是Object提供的一个方法,是判断两个变量或者实例指向的内存地址的值是不是相同。
(2)对于基本数据类型和String str = 123;
中的String常量来说,是作为常量在方法区中的常量池里面以HashSet策略存储起来的,每个数据对应一个地址,所以基本数据类型和String常量可以直接用 == 进行比较。
(3)对于实例对象来说,String str1 = new String("123"); String str2 = new String("123");
中字符串str1和str2就不能用 == 比较,要用equals()方法比较。因为此时两个字符串在堆内存的地址不同。
(4)对于基本数据类型的包装类来说,除了Float和Double之外,剩下的六种包装类(Byte, Short, Character,Integer,Float, Double,Long, Boolean)都实现了常量池,但是它们在常量池中的存储范围为[-128,127],超出这个范围仍然会去堆内存中创建新的对象。所以在[-128,127]范围内包装类可以用 == 比较,超出此范围要用equals()方法比较。所以包装类一般都使用equals()方法比较。