JAVA中==与equals的总结

本文详细解析了Java中equals方法与==操作符的区别及应用场景。equals方法用于判断两个对象内容是否相等,而==主要用于比较引用是否指向同一个对象。文章通过示例展示了基本数据类型与对象在使用两者进行比较时的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。

java语言的本意来说:如果没有重写(override)
新类的equals(),则该方法和 == 操作符一样在两个变量指向同一对象时返回真,(即比较的是引用而不是内容)
但是java推荐的是使用equals()方法来判断两个对象的内容是否一样.比如String,Date,File类就已经通过覆盖equals()方法来比较对象内容而不是引用

==用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true

JAVA的对象存储机制里,new出来的一定是对象,而对象在内存中的存贮位置在Heap(堆)中,而基本类型在程序中出现的比较频繁(注:JAVA中的基本类型为8中,分别是:boolean,char,byte,short,int,long,float,double),所以通过new产生这些对象而将其放入在heap中效率反而不高,所以JAVA直接采取C/C++的方式,也就是不以new来分配其空间,而是产生一种所谓的“automatic”变量(不在是reference的形式),来解决效率的问题,此类变量直接放数据值,并且置于stack(栈)中,因为stack在空间的分配和释放上,效率要好的多。而恰恰是这种在内存中位置的不同,在stack中为基本类型变量分配空间时,如果stack中有一样的数据时,将不在创建新的数据,所以导致这个时候比较的两个基本类型值时,即使用==也是true。

例1:

java代码

public class Test {

public static void main(String[] args) {

float f=4.2F;
Float g=new Float(4.2F);
Double d=new Double(4.2);

System.out.println(f==g); //----输出true
System.out.println(d==f);//-------输出false
System.out.println(d.equals(f));//-------输出false
System.out.println(d.equals(g));//-------输出false
System.out.println(g.equals(4.2));//-------输出false

System.out.println(4.2==d); //----输出true
System.out.println(4.2f==g);//----输出true
System.out.println(4.2f==d); //-------输出false


String s="aaa";
String d1="aaa";
System.out.println(s==d1); //----输出true


String s1=new String("aaa");
String d11="aaa";
System.out.println(s1==d11); //-------输出false


s1 = new String("sony"); //创建的是字符串对象
s1.equals("sony"); //返回true
System.out.println(s1 == "sony"); //返回false
//如果
s1 = "sony";
System.out.println(s1 == "sony"); //返回true

}

}
  • 例2:


    public class MyClass {

    /**
    * @param args
    */
    static String s1 = "I am unique!";

    public static void main(String[] args) {
    // TODO Auto-generated method stub

    String s2 = "I am unique!";
    String s3 = new String(s1);
    System.out.println(s1 == s2); //----输出true
    System.out.println(s1.equals(s2)); //----输出true
    System.out.println(s3 == s1); //-------输出false
    System.out.println(s3.equals(s1)); //----输出true


    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值