zoukankan      html  css  js  c++  java
  • Equals和==的差别

    java中的数据类型。可分为两类: 
    1.基本数据类型

            包含:byte,short,char,int,long,float,double,boolean 。基础数据类型比較大小的时候使用的是双等号(==); 
    2.引用数据类型 
             除了基本数据类型之外的全部数据结构都是引用数据类型。

    此时双等号是用来比較他们在内存中的存放地址(除非是同一个new出来的对象,他们的比較后的结果为true。否则比較后结果为false); JAVA其中全部的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这种方法的初始行为是比較对象的内存地 址,但在一些类库其中这种方法被重写。如String,Integer,Date在这些类其中equals有其自身的实现。而不再是比較类在堆内存(引用数据类型是存放到堆内存)中的存放地址了。
            引用数据类型之间进行equals比較,在没有重写equals方法的情况下,他们之间的比較还是基于他们在内存中的存放位置的地址值的。由于Object的equals方法也是用双等号(==)进行比較。

    例证:

    package demo;
    
    /**
     * @author wanghj
     * @date 2016/03/06 
     */
    public class CSDN_equals {
    	public static void main(String []args){
    		  //variable pools
    		  String str1="TestString";
    		  String str2="TestString";
    		  String str3="TestStringDif";
    		  String str4=new String("TestString");
    		  String str5=new String("TestString");
    
    		  //Just compare "=="
    		  System.out.println("str1==TestString:"+ (str1=="TestString"));		  
    		  System.out.println("str1==str2:"+ (str1==str2));
    		  System.out.println("str1==str3:"+ (str1==str3));
              System.out.println("str1==str4:"+ (str1==str4));
              System.out.println("str4==str5:"+ (str4==str5));
              
              //Just compare "equals"
              System.out.println("str1.equals(TestString):"+str1.equals("TestString"));
              System.out.println("str1.equals(str2):"+str1.equals(str2));
              System.out.println("str1.equals(str3):"+str1.equals(str3));
              System.out.println("str1.equals(str4):"+str1.equals(str2));
              System.out.println("str4.equals(str5):"+str4.equals(str5));
              System.out.println("equals special test:"+"2016".equals(2016));
    	}
    }
    


    Object的equals方法:

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


    String的equals方法:

        public boolean equals(Object obj)
        {
            if(this == obj)
                return true;
            if(obj instanceof String)
            {
                String s = (String)obj;
                int i = value.length;
                if(i == s.value.length)
                {
                    char ac[] = value;
                    char ac1[] = s.value;
                    for(int j = 0; i-- != 0; j++)
                        if(ac[j] != ac1[j])
                            return false;
    
                    return true;
                }
            }
            return false;
        }


  • 相关阅读:
    《Java技术》第一次作业
    第十一次作业
    第十次作业
    第九次作业。
    第八次作业
    第七次作业
    第六次作业
    第五次作业。
    《Java技术》第三次作业--面向对象——继承、抽象类、接口
    《Java技术》第二次作业--面向对象基础
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7130728.html
Copyright © 2011-2022 走看看