zoukankan      html  css  js  c++  java
  • Java8基础之equals方法和==的区别

    equals方法

    equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法体如下:

    public boolean equals(Object obj) {
         return (this == obj);
    }
    

    很显然,在Object类中,equals方法是用来比较两个对象的引用是否相等,即是否指向同一个对象。但是有些朋友又会有疑问了,为什么下面一段代码的输出结果是true?

    String str1 = new String("hello");
    String str2 = new String("hello");
            
    System.out.println(str1.equals(str2));
    

    要知道究竟,可以看一下String类重写的equals方法的具体实现,其中value是一个字符数组,如下:

        public boolean equals(Object anObject) {
            if (this == anObject) {
                return true;
            }
            if (anObject instanceof String) {
                String anotherString = (String)anObject;
                int n = value.length;
                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;
        }
    

    ==操作符

    1、对于==,如果作用于基本数据类型的变量,则直接比较其存储的 "值"是否相等。int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆。
    2、如果作用于引用类型的变量,则比较的是所指向的对象的地址。

    探索String str="abc"和String str=new String()区别

    String s="abc"是一种非常特殊的形式,和new有本质的区别。它是java中唯一不需要new就可以产生对象的途径。以String s="abc",形式赋值在java中叫直接量,它是在常量池中而不是象new一样放在压缩堆中。这种形式的字符串,在JVM内部发生字符串拘留,即当声明这样的一个字符串后,JVM会在常量池中先查找有有没有一个值为"abc"的对象,如果有,就会把它赋给当前引用。即原来那个引用和现在这个引用指点向了同一对象,如果没有,则在常量池中新创建一个"abc",下一次如果有String s1 = "abc",又会将s1指向"abc"这个对象,即以这形式声明的字符串,只要值相等,任何多个引用都指向同一象。

  • 相关阅读:
    HDU 4278 Faulty Odometer 8进制转10进制
    hdu 4740 The Donkey of Gui Zhou bfs
    hdu 4739 Zhuge Liang's Mines 随机化
    hdu 4738 Caocao's Bridges tarjan
    Codeforces Gym 100187M M. Heaviside Function two pointer
    codeforces Gym 100187L L. Ministry of Truth 水题
    Codeforces Gym 100187K K. Perpetuum Mobile 构造
    codeforces Gym 100187J J. Deck Shuffling dfs
    codeforces Gym 100187H H. Mysterious Photos 水题
    windows服务名称不是单个单词的如何启动?
  • 原文地址:https://www.cnblogs.com/feiqiangsheng/p/10988585.html
Copyright © 2011-2022 走看看