==和equals方法

Posted Tomorrow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了==和equals方法相关的知识,希望对你有一定的参考价值。

Java程序中测试两个变量时否相等有两种方法: == 和 equals。

当使用==来判断两个变量是否相等时,如果两个变量时基本类型变量,且都是数字类型(不一定要求数据类型严格相同),则只要两个变量的值相同,就将返回true。
但对于两个引用类型变量,只有它们指向同一个对象时,== 判断才会返回true。
== 不可用于比较类型上没有父子关系的两个变量。

public static void main(String[] args) {
        int i = 12;
        float f = 12.0f;
        // 输出true
        System.out.println("65和65.0f是否相等?" + (i == f));

        char c = ‘A‘;
        // 输出true
        System.out.println("65和‘A‘是否相等?" + (i == c));

        String s1 = new String("Test");
        String s2 = new String("Test");
        // 输出false
        System.out.println("s1和s2是否相等?" + (s1 == s2));
        // 输出true
        System.out.println("s1和s2是否相等?" + (s1.equals(s2)));

        // 编译不过
        // System.out.println("Test" == new EqualTest());
    }

需要注意 "Test"和new String("Test")是有区别的?

  “Test”是字符串直接量(即可以在编译时就计算出来的字符串值),JVM使用常量池来管理这些字符串,

  当使用new String("Test")时,JVM先使用常量池来管理“Test”直接量,再调用String类的构造器来创建一个新的String对象,新创建的String对象被保存在堆内存中。也就是说new String("Test")一共创建了两个字符串对象。

 

常量池(constant pool)专门用来管理在编译时被确定并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口中的常量,还包括字符串常量。

以上是关于==和equals方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中并行化以下代码片段?

代码安全 | 第十七期:对象只定义了Equals和Hashcode方法之一的漏洞

JAVA 面向对象补充[toString方法和equals方法]

equals和==方法比较

java equals 和 == 区别

SpringBoot 重写hashCode方法和equals方法