Java中 equals和==的区分, new Integer和 非new的区别
2022/4/28 12:12:40
本文主要是介绍Java中 equals和==的区分, new Integer和 非new的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
浅谈 equals 和 == ,new出的Integer和非new出的Integer
-
首先我们要知道在 == 比较的是内存地址值(不包括8种基本数据类型)
equals比较的是两个值(内容)是否相同。
-
但是使用equals比较值是否相同的前提下:是该类型重写了父类里的equls方法。
在java中所有类都直接或间接继承了Object类,而Object类中的equls方法 调用的是
==(即也判断地址是否相等)
-
并且在在java原生Api中基本大多类都重写了equals方法
package com.ch; /** * @author chenghao * @purpose:针对equals和 == 区分,篇Integer * @备注:注意new Integer 和 非new Integer * @data 2022年04月28日 09:46 */ public class EqualsOrDoubleDengHao { public static void main(String[] args) { int s = 12; int v = 12; System.out.println(s==v); //=====>基本数据类型 == 比较的是值,注意:String是一个类形 true //System.out.println(s.equals); ======>8种基本数据类型没有equls方法 Integer S1 = 8; Integer S2 = 8; System.out.println(S1 == S2);//true 注意:此时S2并没有创建对象,注意new出来的和非new出来的区别 System.out.println(S1.equals(S2));//true Integer s3 = 200; Integer s4 = 200; System.out.println(s3 == s4); //false 注意:这里也是非new出来的,为什么不是同一个对象,因为在非new情况下,-128到127的范围内, // 不会创建新的对象,而是从IntegerCache中获取的。 System.out.println("============================"); Integer integer = new Integer(7); Integer integer1 = new Integer(7); System.out.println(integer == integer1); //false System.out.println(integer1.equals(integer));//true } }
------疑问
Integer S1 = 8; Integer S2 = 8; • System.out.println(S1 == S2);//true
-------为什么这里显示为true?
Integer是一个引用类型,并且重写了equals方法,==又比较的是两个对象的内存地址值,应该返回为false呀。
-------这里得从new Integer和Integer xx 说:
-
new Integer(1) 和Integer a = 1不同,前者会创建对象,存储在堆中,而后者因为在-128到127的范围,不会创建新的对象,而是从IntegerCache中获取的。那么Integer a = 128, 大于该范围的话才会直接通过new Integer(128)创建对象,进行装箱
-
Integer当变量值在-128~127之间时,非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同;
-
Integer判断是否相等推荐使用
.equals()
-
这篇关于Java中 equals和==的区分, new Integer和 非new的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略