zoukankan      html  css  js  c++  java
  • ==与equal()的区别

    在看区别之前,首先来看下以下代码:

    public class TestEqual {
    
        /**
         * @param args
         *  I am not responsible of this code.
          *  They made me write it, against my will.
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String a = "111";
            String b = "111";
            String c = new String("111");
          
            int a1 = 111;
            int b1 = 111;
            Integer c1 = new Integer(111);
            Integer c2 = new Integer(111);
            
            System.out.println(a == b);  //true
            System.out.println(a == c);     //false
            System.out.println(c == b);  //false
            System.out.println(a.equals(c)); //true
            System.out.println("**************************");
            System.out.println(a1 == b1); //true
            System.out.println(a1 == c1); //true
            System.out.println(c2 == c1); //false
            System.out.println(a.equals(c1)); //false
            System.out.println(c1.equals(c2)); //true
        }
    
    }

      (一) "=="

      首先先看定义的三个字符串对象,他们的值都是111。但a==b时,值为true 而 a==c时,为false,为什么呢?

      String a = "111"  当表达式执行的时候,会首先去内存中的字符串池中去找,看有没有"111"这个字符串,如果没有的话,就在字符串池中创建一个,等String b = "111"时,则a,b其实是指向了同一片内存地址空间。而String c = new String("111")则不会去字符串池中查找,是直接创建一个"111",所以String c = new String("111")时,它会再创建一个,所以这时a,c指向的是不同的内存空间。
      当==用于比较对象的引用时,实质上是比较两个引用的地址是否相等。其中java的双引号表达式本身就会创建一个字符串对象。

      其次再看定义的两个int型变量以及两个Integer对象。a1==b1毫无疑问他两值相等,为true。而a1==c1也为true,这又是为什么呢?

      其实自jdk1.5之后,基本类型的所对应的引用类型可以自动转换成基本类型与基本类型进行值比较.(自动拆箱)..而a1==c1实质上变成了a1== c1.intValue() 

      当==用于比较基本数据类型时,实质上就是比较他们的值是否相同。 

      (二)equal()

        由a.equals(c)与c1.equals(c2)他们值为true,看出他们比较的对象是相同的。

      equal()来判断两个对象是否相等。对于字符串来说,也是比较字符串的字符序列是否相等。

       equals方法可以参考API中的java.lang.Object和java.lang.String。

      参考:   http://www.cnblogs.com/zhxhdean/archive/2011/03/25/1995431.html

          http://blog.sina.com.cn/s/blog_79333b2c0100xd34.html

      结果的得出与上边叙述无关系,只做解释而已

    奋斗奋斗奋斗奋斗奋斗奋斗奋斗奋斗生命在于奋斗,也为自己带盐奋斗奋斗奋斗奋斗奋斗奋斗奋斗奋斗
  • 相关阅读:
    linux学习17 运维核心技能-Linux系统下用户权限管理
    linux学习16 Linux用户和组管理命令演练和实战应用
    linux学习15 Linux系统用户和组全面讲解
    linux学习14 Linux运维高级系统应用-glob通配及IO重定向
    linux学习13 Linux运维常用文件管理命令及系统变量基础
    linux学习12 bash的常见特性及文本查看命令实战
    linux学习11 Linux基础命令及命令历史
    linux学习10 Linux目录结构和根文件系统全面讲解
    【Hadoop离线基础总结】Hive调优手段
    【Hadoop离线基础总结】Hive的基本操作
  • 原文地址:https://www.cnblogs.com/hardwork/p/4114950.html
Copyright © 2011-2022 走看看