浅谈 equals 和 == ,new出的Integer和非new出的Integer

  1. 首先我们要知道在 == 比较的是内存地址值(不包括8种基本数据类型

    equals比较的是两个值(内容)是否相同。

  2. 但是使用equals比较值是否相同的前提下:是该类型重写了父类里的equls方法。

在java中所有类都直接或间接继承了Object类,而Object类中的equls方法 调用的是

==(即也判断地址是否相等)

  1. 并且在在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的区别的更多相关文章

  1. Java中equals与==和comparaTo的区别

    一.先说说Java中equals和==的区别: Java中的数据类型,可分为两类: 1.基本数据类型(也叫原始数据类型) 八大基本数据类型 char byte short int long doubl ...

  2. java中equals和==的区别 (转)

    java中equals和==的区别  值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...

  3. 【转】Java中equals和==的区别

    [转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...

  4. 关于java中equals与==的区别的小实验

    java中equals与==经常容易混淆,简单一点说就是equals比较的是值是否相等,是一种方法,==比较的两个对象在JVM中的地址,是一种操作符. 做了几个小实验比较结果. 实验一: String ...

  5. java中equals和hashCode方法随笔二

    前几天看了篇关于java中equals和hashCode方法的解析 1.Object类中的equals方法和hashCode方法. Object类中的equals和hashCode方法简单明了,所有的 ...

  6. 深入探究Java中equals()和==的区别是什么

    目录 相等判断符"==" "=="判断基本类型数据 "=="判断引用类型数据 相等判断方法equals() 思考:为什么要设计equals( ...

  7. java中equals方法和==的用法

    java中equals方法的用法以及==的用法(参考一)equals 方法是 java.lang.Object 类的方法.两种用法说明:(1对于字符串变量来说,使用“==”和“equals()”方法比 ...

  8. Java中equals和hashcode的区别?

    Java中equals和hashcode方法是在Object对象中的,所以每个对象都有这两个方法,大多数时候我们为了实现特定需求需要重写这两个方法 equals和hashcode方法常用在同一个类中用 ...

  9. Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?

    Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别? Java 中访问数据库的步骤 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执 ...

随机推荐

  1. 使用IDEA开发SpringBoot不加载application.yml配置文件的解决方案

    1.如果启动项目不加载application.yml配置文件,那么请确认下是否应用了Resources为项目资源文件夹 2.如果项目起初是可以正常使用的,突然不知道改了什么,然后进行启动项目的时候不加 ...

  2. 如果一个表有一列定义为 TIMESTAMP,将发生什么?

    每当行被更改时,时间戳字段将获取当前时间戳. 列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况? 它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用. 怎样才 ...

  3. java-doc注释详解

    注释的分类 // 注释一行/* ...... */ 注释若干行/** ...... */ 注释若干行,并写入 javadoc 文档 列子 /** * show 方法的简述. * <p>sh ...

  4. Spring根据路径前缀获取不同Resource

    相关文章:https://www.jianshu.com/p/5bab9e03ab92 官方文档:https://docs.spring.io/spring/docs/current/spring-f ...

  5. 6. Git管理远程仓库

    6. Git管理远程仓库 使用远程仓库的目的 作用:备份,实现代码共享集中化管理 Git克隆操作 目的 将远程仓库(github对应的项目)复制到本地 代码 git clone 仓库地址 多学一招:仓 ...

  6. c++中的printf、和cout和cin后面跟指针的问题

    printf里面打印指针的问题 而在c语言中,使用printf只需要使用不同的格式就可以区分打印出是字符串还是指针变量的值: cout和cin后面跟指针的问题 cout<<mm 和cin& ...

  7. 解决联想笔记本 安装VM虚拟机后每次启动都会导致电脑蓝屏问题

    现象描述: pc为联想笔记本 系统是微软家庭中文版,每次启动VM虚拟机都会出现蓝屏现象,出现错误代码system_service_exception 原因及解决方法: 对于Windows10家庭版  ...

  8. (stm32f103学习总结)—stm32 PMW输出实验

    一.PWM简介 PWM是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调 制,简称脉宽调制.它是利用微处理器的数字输出来对模拟电路进行控 制的一种非常有效的技术,其控制简 ...

  9. Bootstrap 之 Metronic 模板的学习之路 - (1)总览

    写在前面 bootstrap 的模板非常多,Envato 上有着各种各样的免费及付费模板.Metronic 是我最喜欢的模板之一(看一眼就喜欢上的那种),当前售价 $28 ,觉得赞的,不妨支持一下作者 ...

  10. java中为什么把Checked Exception翻译成受检的异常?

    6.Checked Exception(受检的异常) 马克-to-win:为什么我大胆的把Checked Exception翻译成受检的异常?因为这类异常,编译器检查发现到它后会强令你catch它或t ...