"=="符号在比较对象的时候是比较的内存地址,而对于原始数据类型是直接比对的数据值。
基本类型的相等
1、数值类型:转换后进行比较,例如double类型转换成int类型进行比较。
2、浮点数:最好不要直接用“ == ”号进行比较,因为浮点数在计算机中是有误差的,可以利用两个数的绝对值差是否很小(接近0)来判断两个浮点数是否相等。
3、Double.NAN == Double.NAN 的结果为false:NAN代表不是数的数,两个不是数的数进行比较结果肯定为false。
4、、boolean 无法与 int进行比较:Java语言的编译器最终将boolean类型翻译成整数类型,但是Java语言不把boolean类型当成int类型
装箱对象是否相等
装箱对象(包装类)是指相如:Integer类、Double类、Boolean类等等。
基本类型是指相如:int类型、double类型、float类型、char类型等等。
Java语言中存有8中基本类型的“池” 整型是范围是-128~127,所以如果整数不超过127则引用指向同一“池”,他们指向的是同一对象;若超过127 就不是同一对象原因在于,在进行自动拆装箱时,编译器会使用Integer.valueof()来创建Integer实例,也就是说在-128到127之间的数字是同一引用地址,而其它范围就是不同的引用地址。
注意缓存
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer a = new Integer(100);
Integer b = new Integer(100);
System.out.println(a == b);//因为对象是两个
Integer a1 = 100;
Integer b1 = 100;
System.out.println(a1 == b1);//因为对象有缓存
Integer a2 = 200;
Integer b2 = 200;
System.out.println(a2 == b2);//因为对象是两个
/*
运行结果是:
false
true
false
*/
}
}
枚举、引用对象是否相等
枚举类型内部进行了惟一实例化,所以可以直接进行判断
引用对象是直接看两个引用是否一样,若要判断的内容一样,则要重写equals方法(若重写equals方法,则最好重写hashCode()方法)
String对象
判断相等一定不要用“==”号,要用equals;但是字符串常量以及字符串常量会进行内部化,相同的字符串常量是相等(==)的。