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的区别的更多相关文章
- Java中equals与==和comparaTo的区别
一.先说说Java中equals和==的区别: Java中的数据类型,可分为两类: 1.基本数据类型(也叫原始数据类型) 八大基本数据类型 char byte short int long doubl ...
- java中equals和==的区别 (转)
java中equals和==的区别 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...
- 【转】Java中equals和==的区别
[转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...
- 关于java中equals与==的区别的小实验
java中equals与==经常容易混淆,简单一点说就是equals比较的是值是否相等,是一种方法,==比较的两个对象在JVM中的地址,是一种操作符. 做了几个小实验比较结果. 实验一: String ...
- java中equals和hashCode方法随笔二
前几天看了篇关于java中equals和hashCode方法的解析 1.Object类中的equals方法和hashCode方法. Object类中的equals和hashCode方法简单明了,所有的 ...
- 深入探究Java中equals()和==的区别是什么
目录 相等判断符"==" "=="判断基本类型数据 "=="判断引用类型数据 相等判断方法equals() 思考:为什么要设计equals( ...
- java中equals方法和==的用法
java中equals方法的用法以及==的用法(参考一)equals 方法是 java.lang.Object 类的方法.两种用法说明:(1对于字符串变量来说,使用“==”和“equals()”方法比 ...
- Java中equals和hashcode的区别?
Java中equals和hashcode方法是在Object对象中的,所以每个对象都有这两个方法,大多数时候我们为了实现特定需求需要重写这两个方法 equals和hashcode方法常用在同一个类中用 ...
- Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别? Java 中访问数据库的步骤 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执 ...
随机推荐
- HTTP1.0和HTTP1.1和HTTP2.0的区别
1 HTTP1.0和HTTP1.1的区别1.1 长连接(Persistent Connection) HTTP1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求 ...
- hashCode()方法的作用?
hashCode()方法与equals()方法相似,都是来自java.lang.Object类的方法,都允许用户定义的子类重写这两个方法. 一般来说,equals这个方法是给用户调用的,如果你想根据自 ...
- Java中会存在内存泄漏吗,请简单描述?
为了搞清楚Java程序是否有内存泄露存在,我们首先了解一下什么是内存泄露:程序运行过程中会不断地分配内存空间:那些不再使用的内存空间应该即时回收它们,从而保证系统可以再次使用这些内存.如果存在无用的内 ...
- Oracle数据库 如何根据某个字段名的值去查询存在的表列表
declare v_sql varchar2(1000); data_count number; begin -- OWNER是模式名 tablespace_name是表空间 for cur_tabl ...
- Executors 类是什么?
Executors 为 Executor,ExecutorService,ScheduledExecutorService, ThreadFactory 和 Callable 类提供了一些工具方法. ...
- x64 简介
本篇原文为 introduction to x64 assembly ,如果有良好的英文基础,可以点击该链接进行下载阅读.本文为我个人:寂静的羽夏(wingsummer) 中文翻译,非机翻,著作权 ...
- Living Documentation
Living Documentation Living documentation in legacy systems Living documentation, which comes from t ...
- css流程图、步骤图,流程线与环节分别实现,支持单环节、多环节情况。scss生成CSS
适用于分步骤操作的页面导航图 实现结果如下 上图对应下述代码,稍作修改可以生成下图.css代码如下: @charset "UTF-8"; /**单列宽度 单行高度 列数 行数*/ ...
- java基础-File
File类 * File更应该叫做一个路径, 文件路径或者文件夹路径 * 路径分为绝对路径和相对路径 * 绝对路径是一个固定的路径,从盘符开始 * 相对路径相对于某个位置,在eclipse下 ...
- 什么是机器学习的特征工程?【数据集特征抽取(字典,文本TF-Idf)、特征预处理(标准化,归一化)、特征降维(低方差,相关系数,PCA)】
2.特征工程 2.1 数据集 2.1.1 可用数据集 Kaggle网址:https://www.kaggle.com/datasets UCI数据集网址: http://archive.ics.uci ...