==和equals的总结,防止遗忘

  1. 对于==:

    比较的是基本数据类型的话,就是比较的是两个变量的值。

    int num1 = 50;
    int num2 = 50;
    System.out.println(num1 == num2); //true

    比较的是引用类型的话,就是比较两个是否引用了同一个对象。

    String s1=new String("abc");   
    //在堆内存开辟一块空间存放"abc"这一字符串,并在栈内存开辟一块名为s1的空间指向"abc"

    String s2=new String("abc");
    //又在堆内存开辟一块空间存放"abc"这一字符串,又在栈内存开辟一块名为s2的空间指向"abc"这个对象,与s1的指向不同

    String s3="abc"; 
    //在常量池中找是否有"abc"这个字符串,如果没有就开辟一块,并在栈中开辟一块名为s3的空间指向"abc"

    String s4="abc"; 
    //在常量池中找是否有"abc"这个字符串,已经找到,直接指向s3这块空间


    System.out.println(s1==s2); //false
    System.out.println(s2==s3);//false
    System.out.println(s3==s4);//ftrue
  2. 对于equals:

    当没有重写object的equals方法时,即直接调用object.equals时,与==号比较引用类型一样,比较的是否为同一个对象

    Scanner sc1=new Scanner(System.in);
    Scanner sc2=new Scanner(System.in);
    Scanner sc=sc1;
    System.out.println(sc1.equals(sc2));//false
    System.out.println(sc1.equals(sc));//true


    当重写了equals方法的话,比较的是所指向对象的属性
    String s0=new String("abc");
    String s1="abc";  
    String s2="abc";
    String s3=new String("abc");


    System.out.println(s0.equals(s1));//true
    System.out.println(s1.equals(s2));//true
    System.out.println(s1.equals(s3));//true
    System.out.println(s0.equals(s3));//true


    以上都是自己敲代码总结的,如果有什么错误,希望前辈些指导一下。
     

你可能感兴趣的:(Java基础)