浅谈 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. CentOS7安装redis5

    1.下载/解压redisredis手册地址:http://redisdoc.com/下载路径:https://redis.io/downloadtar zxvf redis包名 2.编译&安装 ...

  2. Mybatis 是如何进行分页的?分页插件的原理是什么?

    Mybatis 使用 RowBounds 对象进行分页,它是针对 ResultSet 结果集执行的内 存分页,而非物理分页.可以在 sql 内直接书写带有物理分页的参数来完成物理分 页功能,也可以使用 ...

  3. Python使用pip安装No matching distribution found for PyYaml==5.3.1

    ERROR: Command errored out with exit status 1: command: /usr/local/dmahz/p_book_data/bin/python3.9 - ...

  4. JS字符串格式化

    //字符串格式化String.prototype.format = function () { var values = arguments; return this.replace(/\{(\d+) ...

  5. java程序如何确保多线程的运行安全?

    线程的安全问题体现在: 原子性:一个或多个操作在CPU执行过程中不被中断的特性 可见性:一个线程对共享变量的修改,另一个线程能立刻看到 有序性:程序执行的顺序按照代码的先后顺序执行 导致线程存在安全问 ...

  6. PACT 在微服务架构中的用途是什么?

    PACT 是一个开源工具,允许测试服务提供者和消费者之间的交互,与合同隔离, 从而提高微服务集成的可靠性. 微服务中的用法 用于在微服务中实现消费者驱动的合同. 测试微服务的消费者和提供者之间的消费者 ...

  7. 你将如何使用 thread dump?你将如何分析 Thread dump?

    新建状态(New) 用 new 语句创建的线程处于新建状态,此时它和其他 Java 对象一样,仅仅在堆区 中被分配了内存. 就绪状态(Runnable) 当一个线程对象创建后,其他线程调用它的 sta ...

  8. C语言之API

    C语言之API 1.输入(控制台输入) scanf("%d,%d",&a,&b); 2.输出(打印数值) printf("max=%d\n",c ...

  9. Python学习—(windows系统下)安装pygame

    浏览器搜索pygame的windows安装程序,下载与python版本相匹配的文件. 如果.exe文件直接运行: 如果.whl文件,将其复制到要用到的项目文件夹中,在cmd窗口中切换到该文件所在的文件 ...

  10. 树莓派安装ros

    之前电脑安装过ros感觉还好,没成想这次在树莓派上安装费老劲了,出现了很多错误,装了卸,卸了装废了半天劲下面将一些安装的错误和问题做个总结方便以后的安装也希望给别人一个参考 ros安装(对照自己的版本 ...