Java教程

Java中 equals和==的区分, new Integer和 非new的区别

本文主要是介绍Java中 equals和==的区分, new Integer和 非new的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

浅谈 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的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!