-128~127 之外的数,因为已经超出了int类型的存储范围,所以这里它就不会转换为int,而采用Integer对象做==运算就是引用类型的比较运算
jvm会创建-128到127的整数,new Integer对象时如果使用: // 12在 -128到127 从缓冲池取值 a指向常量池 Integer a=12; //创建对象,b对象里的值指向常量池 Integer b=new Integer(12); //在堆里开辟空间,129放堆里 Integer c=129; 1. 2. 3. 4. 5. 6. String类 String内部存储字符串使用的是一个f...
对于Integer a = %d 来说, 在 -128 ~ 127 范围的数的比较,== 没什么问题, 因为缓存池的存在,这里比较的是相同的内存地址, 但当超过这个范围的话,用 == 来比较相同值的 Integer 对象是错误的, 因为在这个范围外的 Integer 对象有独立的内存地址, 只能用 equals()来比较。 当然如果在初始化 -128 ~ 127...
当定义两个个Integer对象为-128到127中时,其实是不会创建新的引用的的,但是当超过这个范围后,就会创建一个新的引用,由于引用指向的地址都是不同的,所以两个比较的地址不同,所以返回结果自然是false。 源码如下:源码private static classIntegerCache{static final int low = -128;static final int high;static fin...
* 3. 通过new出来的对象的变量,创建的对象其引用内存地址不同,所以即使值相等,内存地址也不同, * 所以都为false,可以通过equals比较值是否相等 */ System.out.println("integerNew1[" + integerNew1 + "]==integerNew2[" + integerNew2 + "] >> " + (integerNew1 == integerNew2)); ...
后来发现因为我b的值是从数据中拿出的一个对象的值。a和b的id不相同,所以导致了a==b为false。 得出的结论,Integer为对象,如果判断相等要用equals,而不能用==。 如果是判断两个int值相等,则可以用==;
Java判断两个Integer类型的值是否相等 当数值范围是[-128,127],比如a=12,b=12,用==去比较得出的是true 当数值范围超出[-128,127],比如a=12345,b=12345,用==得出的结果是false。 因为超出范围时,Integer会去new一个对象,比较的是两个对象的地址。
首先我们先打开Object对象的equals; 如下图示: 根据万类之根Object对象的equals我们发现; 本质还是“==”来进行对比数值的; 只是Integer、String等进行方法重写而已。 我们再来看一下Integer包装类 (其他基本类型的包装类都类似在此就不一一举例了) 的equals; ...
如果是Integer类型,则可以使用equals方法进行相等比较。int与Integer的基本使用对比 (1)Integer是int的包装类;int是基本数据类型; (2)Integer变量必须实例化后才能使用;int变量不需要; (3)Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ; (4)Integer的默认值是null;...
对于基本类型的包装类(如Integer),`equals()`重写了`==`行为,比较值而不是引用。而对于引用类型(如String),`equals()`比较的是对象内容是否相同,而非引用地址。比如,`String s1 = "你好"; String s2 = "你好"; s1.equals(s2)`返回true,因为它们的值相同。为了实现更灵活的比较,可以...