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;
        }


  • 相关阅读:
    gc buffer busy/gcs log flush sync与log file sync
    给Oracle年轻的初学者的几点建议
    Android 编程下帧动画在 Activity 启动时自动运行的几种方式
    Android 编程下 Touch 事件的分发和消费机制
    Java 编程下 static 关键字
    Java 编程下 final 关键字
    Android 编程下模拟 HOME 键效果
    Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated ?
    Extjs4 大型项目目录结构重构
    [转]SQLServer 2008 允许远程连接的配置方法
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7130728.html
Copyright © 2011-2022 走看看