首页 > 代码库 > ==和equals方法

==和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方法