首页 > 代码库 > java_==和equal方法

java_==和equal方法

java测试两个变量是否相等有两种方式:

  一种是利用“==”运算符 值和对象的判断

  一种是利用equals()方法 只是值的判断

1.如果两个变量是基本类型变量,且都是数值类型(不一定数值类型严格相同),则只要两个变量的值相等,就返回true。

  例如:

    int a=65;

    float b=65.0f;

    char c="A";

    System.out.print("65和65.0f是否相等:"+(a==b));//输出true

    System.out.print("65和A是否相等:"+(a==c));//输出true

2.如果两个变量是引用类型变量,只有它们指向同一个对象时,“==”判断才会返回true,但equals()方法可以比较。“==”不可用于比较类型上没有父子关系的两个对象。

  例如:

    String a=new String("123");

    String b=new String("123");

    System.out.print("a和b是否相等:"+(a==b));//输出false

    System.out.print("a和b是否相等:"+(a.equals(b));//输出true

    //a1直接引用常量池中的“你好java”

    String a1="你好java";

    //b1的“你好”、“java”在编译时就确定下来了,直接引用常量池中的"你好java"

    String b1="你好"+"java";

    String s1="你好";

    String s2="java";

    //c1后面的字符串值不能在编译时就确定下来,所以不能直接引用常量池中的"你好java"

    String c1=s1+s2;

    //关键字new调用构造器,创建一个新的String对象,并引用变量d1指向该对象

    String d1=new String("你好java");

    System.out.print(a1==b1);//输出true

    System.out.print(a1==c1);//输出true

    System.out.print(a1==d1);//输出false

JVM使用常量池

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

  当使用new String("你好java")时,JVM会先使用常量池来管理“你好java”直接量,再调用String类的构造器创建字符串对象。

java_==和equal方法