equals和==的一些测试!

原创 2007年02月13日 22:50:00
前几天去一公司笔试,题目都很基础,但是都很让人郁闷,总觉得会又不是十分透彻的感觉,特别是equals和==的一些题目,回来自己测试了一些,和大家分享!
首先是几个基本类型的用法:
package com.bulagy;

/** *//**
 * 
@author bulargy
 *
 
*/

public class EqualsDemo ...{

    
/** *//**
     * 
@param args
     
*/

    
public static void main(String[] args) ...{
        
boolean boo1 = true;
        
boolean boo2 = true;
        
boolean boo3 = false;
        
boolean boo4 ;
        
boolean boo5 = boo1;
        
//boolean boo5 = new boolean();//不合法的定义
        
        System.out.println(
"boo1==boo2 ? "+(boo1==boo2));
        System.out.println(
"boo1==boo3 ? "+(boo1==boo3));
        
//System.out.println("boo1==boo2 ? "+(boo1.equals(boo2)));//没有equals方法
        System.out.println("boo1==boo5 ? "+(boo1==boo5));
        
//System.out.println("boo3==boo4 ? "+(boo3==boo4));//boo4未初始化
        System.out.println();
        
        String s1 
= "abcd";
        String s2 
= new String("abcd");
        String s3 
= "abcd";
        String s4 
= new String("abcd");
        String s5 
= s1;
        String s6 
= s2;
        String s7;
        String s8 
= new String();
        String s9 
="";
        
        System.out.println(
"s1==s2 ? "+(s1==s2));
        System.out.println(
"s1.equals(s2) ? "+s1.equals(s2));
        System.out.println(
"s1==s3 ? "+(s1==s3));
        System.out.println(
"s1.equals(s3) ? "+s1.equals(s3));
        System.out.println(
"s2==s4 ? "+(s2==s4));
        System.out.println(
"s2.equals(s4) ? "+s2.equals(s4));
        System.out.println(
"s1==s5 ? "+(s1==s5));
        System.out.println(
"s1.equals(s5) ? "+s1.equals(s5));
        System.out.println(
"s2==s6 ? "+(s2==s6));
        System.out.println(
"s2.equals(s6) ? "+s2.equals(s6));
        
//System.out.println("s7==s8 ? "+(s7==s8));//s7未初始化
        
//System.out.println("s7.equals(s7) ? "+s7.equals(s8));//s7未初始化
        System.out.println("s8==s9 ? "+(s8==s9));
        System.out.println(
"s8.equals(s9) ? "+s8.equals(s9));
        System.out.println(
"s8= "+s8);
        System.out.println(
"s9= "+s9);
        System.out.println();
        
        
int i1 = 11;
        
int i2 = new Integer(11);
        
int i3 = 11;
        
int i4 = new Integer(11);
        
int i5 = i1;
        
int i6 = i2;
        
int i7;
        
int i8 = new Integer(0);
        
int i9 = 0;
        
        System.out.println(
"i1==i2 ? "+(i1==i2));
        
//System.out.println("i1.equals(i2) ? "+i1.equals(i2));//没有equals方法
        System.out.println("i1==i3 ? "+(i1==i3));
        
//System.out.println("i1.equals(i3) ? "+i1.equals(i3));//没有equals方法
        System.out.println("i2==i4 ? "+(i2==i4));
        
//System.out.println("i2.equals(i4) ? "+i2.equals(i4));//没有equals方法
        System.out.println("i1==i5 ? "+(i1==i5));
        
//System.out.println("i1.equals(i5) ? "+i1.equals(i5));//没有equals方法
        System.out.println("i2==i6 ? "+(i2==i6));
        
//System.out.println("i2.equals(i6) ? "+i2.equals(i6));//没有equals方法
        
//System.out.println("i7==i8 ? "+(i7==i8));//i7未初始化
        
//System.out.println("i7.equals(i7) ? "+i7.equals(i8));//没有equals方法
        System.out.println("i8==i9 ? "+(i8==i9));
        
//System.out.println("i8.equals(i9) ? "+i8.equals(i9));//没有equals方法
        System.out.println("i8= "+i8);
        System.out.println(
"i9= "+i9);
        System.out.println();
    }


}

运行结果:
boo1==boo2 ? true
boo1==boo3 ? false
boo1==boo5 ? true

s1==s2 ? false
s1.equals(s2) ? true
s1==s3 ? true
s1.equals(s3) ? true
s2==s4 ? false
s2.equals(s4) ? true
s1==s5 ? true
s1.equals(s5) ? true
s2==s6 ? true
s2.equals(s6) ? true
s8==s9 ? false
s8.equals(s9) ? true
s8=
s9=

i1==i2 ? true
i1==i3 ? true
i2==i4 ? true
i1==i5 ? true
i2==i6 ? true
i8==i9 ? true
i8= 0
i9= 0
 
小结:
1、任何对象使用之前都要初始化,仅仅声明是不够的;
2、只有String等对象形式数据才有equals方法,基本数据类型是没有的;

然后是一个数组的:

package com.bulagy;

import java.util.Arrays;

public class EqualsArrayDemo ...
    
public static void main(String[] args) ...
        
int[] arr1 = ...{12345}
        
int[] tmp1 = arr1; 
        
int[] tmp2 = arr1; 
 
        System.out.print(
"通过tmp1取出数组值:");
        
for(int i = 0; i < tmp1.length; i++
            System.out.print(tmp1[i] 
+ " "); 

        System.out.print(
" 通过tmp2取出数组值:"); 
        
for(int i = 0; i < tmp2.length; i++
            System.out.print(tmp2[i] 
+ " "); 
 
        tmp1[
2= 9
        System.out.print(
" 通过tmp1取出数组值:");
        
for(int i = 0; i < tmp1.length; i++
            System.out.print(tmp1[i] 
+ " "); 

        System.out.print(
" 通过tmp2取出数组值:"); 
        
for(int i = 0; i < tmp2.length; i++
            System.out.print(tmp2[i] 
+ " "); 
        System.out.println();   
        
        
int[] arr2 = ...{12345}
        
int[] arr3 = ...{567891011}
        
int[] tmp3 = arr2;
        
int[] arr4 = new int [] ...{12345}
        
        System.out.print(
"使用tmp3取出arr2中的元素:");
        
for(int i = 0; i < tmp3.length; i++
            System.out.print(tmp3[i] 
+ " "); 
 
        tmp3 
= arr3; 
        System.out.print(
" 使用tmp3取出arr3中的元素:");
        
for(int i = 0; i < tmp3.length; i++
            System.out.print(tmp3[i] 
+ " "); 
        System.out.println();
       
        System.out.println(
"arr1==arr2 ? "+(arr1==arr2));
        System.out.println(
"arr1.equals(arr2) ? "+arr1.equals(arr2));
        System.out.println(
"Arrays.equals(arr1,arr2) ? "+Arrays.equals(arr1,arr2));
        System.out.println(
"tmp1==tmp2 ? "+(tmp1==tmp2));
        System.out.println(
"tmp1.equals(tmp2) ? "+tmp1.equals(tmp2));
        System.out.println(
"Arrays.equals(tmp1,tmp2) ? "+Arrays.equals(tmp1,tmp2));
        System.out.println(
"arr2==arr4 ? "+(arr2==arr4));
        System.out.println(
"arr2.equals(arr4) ? "+arr2.equals(arr4));
        System.out.println(
"Arrays.equals(arr2,arr4) ? "+Arrays.equals(arr2,arr4));
        
    }
 
}


运行结果:
通过tmp1取出数组值:1 2 3 4 5
通过tmp2取出数组值:1 2 3 4 5

通过tmp1取出数组值:1 2 9 4 5
通过tmp2取出数组值:1 2 9 4 5
使用tmp3取出arr2中的元素:1 2 3 4 5
使用tmp3取出arr3中的元素:5 6 7 8 9 10 11
arr1==arr2 ? false
arr1.equals(arr2) ? false
Arrays.equals(arr1,arr2) ? false
tmp1==tmp2 ? true
tmp1.equals(tmp2) ? true
Arrays.equals(tmp1,tmp2) ? true
arr2==arr4 ? false
arr2.equals(arr4) ? false
Arrays.equals(arr2,arr4) ? true


小结:
1、=号仅仅是数据对象在内存中的引用而已;
2、equals和==都是比较是不是引用自同一个对象,不是比较值的;
3、比较值应该用Arrays.equals()方法,如果是多维数组要用Array.deepEquals()方法;

先就这个多,算是把 equals和==在心里有比较明确的认识了,本人很菜,如果有不对的地方请大家多指教,如果有补充的欢迎大家补充!共同学习,一起进步!


equals方法重写

来自http://www.iteye.com/topic/269601的文章   一、为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类...
  • C_FuL
  • C_FuL
  • 2016年11月27日 09:48
  • 540

Java 中 Equals和==的区别

在谈论equals和==的区别前,我们先简单介绍一下JVM中内存分配的问题。 在JVM中 内存分为栈内存和堆内存。二者有什么区别呢? 当我们创建一个对象(new Object)时,就会调用它的构造函数...
  • tcytcy123
  • tcytcy123
  • 2016年03月09日 16:19
  • 15758

如何正确使用equals方法?

equals方法的覆盖看起来很简单,但是许多的覆盖方式都是错误的,将导致非常严重的后果,本文旨在介绍equals方法的使用规范,以规避错误的使用。...
  • zhanglong_daniel
  • zhanglong_daniel
  • 2015年12月27日 13:19
  • 2822

Java学习从菜鸟变大鸟之一 hashCode()和equals()的本质区别和联系

equals()是判读两个Set是否相等[前提是equals()在类中被覆盖]。==决定引用值是否指向同一对象。 1、当向集合set中增加对象时,首先计算要增加对象的hashCode码,根据该值来得到...
  • lishehe
  • lishehe
  • 2014年01月28日 11:43
  • 5549

String比较为什么要用equals?用==的问题

很简单的问题,记录一下 下面的程序很简单吧?你能保证你说的结论都是正确的吗?运行验证下你的猜测。 public class T{ public static void main(String[] a...
  • look_dev
  • look_dev
  • 2016年10月22日 17:31
  • 555

Java中==号与equals()方法的区别

==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系呢? 首先,==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值:int x = 10; ...
  • StriverLi
  • StriverLi
  • 2016年11月01日 17:29
  • 1890

equals方法变量和常量位置区别

我们说的左右位置是基于一个常量一个变量来说的,如果都是变量那么左右位置没有任何区别。 if (i == 2) { if (stringtokenizer.hasMoreTokens()) ...
  • woshishui6501
  • woshishui6501
  • 2015年12月31日 14:07
  • 2298

什么时候应该用equals(),什么时候应该用==

本人小白一枚最近这一部分比较晕,所以自己就仔细研究了一下 我结合网上和自己的理解总结了一些,如果我说的有问题,也请大家及时提醒,不足或漏说的地方愿大家积极 补充以供更多小白得到帮助,在此谢谢大家了! ...
  • fox_bert
  • fox_bert
  • 2016年02月12日 13:37
  • 1248

equals()与==的区别与实际应用

equals()与 == 在java编程或系统实际可发中都会用到,但是二者又有实际的区别。千万不要理所当然地认为equals()与==的作用就是一样的,下面就一步步来阐述二者的区别。phone.jav...
  • qq_33290787
  • qq_33290787
  • 2016年07月02日 12:02
  • 2188

Java中的equals和hashCode方法详解

Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两个方法的作用。 e...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年04月01日 16:15
  • 53295
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:equals和==的一些测试!
举报原因:
原因补充:

(最多只允许输入30个字)