zoukankan      html  css  js  c++  java
  • 关于String类型中==和equals的区别。

     

    "=="操作符的作用

    1、用于基本数据类型的比较,比较的是值。

    2、用于比较对象,判断对象的引用是否指向堆内存的同一块地址。

    equals的作用

     用于比较两个对象的内容是否相同

    代码如下:

     1 /*
     2      * String de ==和equals
     3      */
     4     @Test
     5     public void aa5(){
     6         
     7         String s1="abc";//创建一个对象“abc”
     8         String s2="abc";//当String缓存池中存在这个指定的对象“abc”,将不会再创建新的String对象。反之,则创建新的对象
     9         String s3=new String("abc");
    10         String s4=new String("abc");
    11         System.out.print("s1==s2:");
    12         System.out.println(s1==s2);//返回true
    13         System.out.print("s3==s4:");
    14         System.out.println(s3==s4);//返回false,s3和s4是两个不同的对象
    15         System.out.println(s1.equals(s2));//返回true
    16         System.out.println(s3.equals(s4));//返回true
    17         System.out.println(s1.equals(s4));//返回true
    18     }

     equals的底层原理说明

    String.class下的equals方法

    public boolean equals(Object anObject) {
            if (this == anObject) {
                return true;
            }
            if (anObject instanceof String) {
                String anotherString = (String) anObject;
                int n = value.length;//(private final char value[];//这是String类中的value属性声明,是一个char类型的数组)
                if (n == anotherString.value.length) {
                    char v1[] = value;
                    char v2[] = anotherString.value;
                    int i = 0;
                    while (n-- != 0) {
                        if (v1[i] != v2[i])
                                return false;
                        i++;
                    }
                    return true;
                }
            }
            return false;
        }

    Object.calss下的equals方法

    public boolean equals(Object obj) {
            return (this == obj);
        }
    public class equalsTest {
        public static void main(String[] args) {
            String a3=new String("33");
            A a1=new A(22);
            A a2=new A(22);
            System.out.println(a1.equals(a2));//true,使用的equals方法是重写之后的equals方法
            B b1=new B(22);
            B b2=new B(22);
            System.out.println(b1.equals(b2));//false,使用的equals是原来的
        }
    }
    class A{
        private int age;
        public A(){};
        public A(int age){
            this.age=age;
        }
           //重写equals方法
        public boolean equals(Object obj){
            A other=(A)obj;
            return this.age==other.age;
        }
    }
    class B{
        private int age;
        public B(){};
        public B(int age){
            this.age=age;
        }
    
        
    }

     

  • 相关阅读:
    创业感言:我的个性,我的情绪,我的表情(转)
    创业难,发掘机会更难:发掘创业良机的七种方式
    我也想有个梦想
    打造你想要的形象,帮助你树立神奇的领导魅力
    游窦圌山有感
    态度决定你的人生高度
    磨练召唤成功的力量,善于从损失中看到价值
    赚钱八大定律成就你的富翁梦
    增强你的大脑——20个不该忽视的记忆窍门
    无言的爱
  • 原文地址:https://www.cnblogs.com/jincheng81/p/9027922.html
Copyright © 2011-2022 走看看