“==”和Equals的区别

本文详细解析Java中基本数据类型与包装类的区别,并通过示例代码深入探讨基本数据类型、包装类及String类型的比较机制,包括==与equals的使用场景。

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

要想很清楚的知道区别,就要从底层进行分析
(1)数据类型
基本数据类型
(2)包装类
Java面向对象思想就是万物皆对象,基本数据类型也得按上一个对象的称号,所以这些基本数据类型就对应着他们的对象(包装类),基本上都是数据类型的头个字母大写,对应着包装类,例如short—->Short,float—>Float,但是int—>Integer,char—->Character.这两个比较特殊
(3)匿名对象
每当创建一个String类型的字符串的时候,就相当于创建了一个匿名对象,Stiring str1=”hello”;



比较基本数据类型

基本数据类型用==

package com.Thread.test;

public class Demo2 {

    /**
     * @param args
     */
    /**这里的比较有多重类型
     * (1)无所怎么样子,Integer 与new Integer() 无论如何是不会相等的(PS:道理通String类型)
     * (2)两个非new出来的Integer,在-128到127之间,则是true,否则为false
     * (3)两个new Integer()的,为false
     * (4)int和Integer 无论如何都会为true,因为Integer会自动拆箱,然后再与int比较
     * (5)事实证明只要一有加法运算,new 出来的就会自动拆箱
     * */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
            test();
    }
    public static void test(){
            int aa=1;
            int bb=200;
            Integer cc=200;
            Integer dd=200;

            Integer a1=1;
            Integer b1=new Integer(1);

            Integer c1=2;
            Integer d1=new Integer(2);

            Integer e1=100;
            Integer f1=new Integer(200);

            Integer g1=100;
            Integer h1=new Integer(200);

            System.out.println(c1==b1);                 //false 证明(1)


            System.out.println(c1==(a1+a1));
            System.out.println(d1==(b1+b1));
            System.out.println(f1==(e1+e1));    //true true true 证明(5)

            System.out.println(e1==g1);             
            System.out.println(cc==dd);                     //true false 证明(2)

            System.out.println(f1==h1);                 //false 证明 (3)

            System.out.println(aa==a1);
            System.out.println(aa==b1);      
            System.out.println(bb==f1);
            System.out.println(bb==f1);             // true true true true 证明(4)

    }
}


String类型

看完这幅图基本上就明白了
这里写图片描述

package com.Thread.test;

public class Demo3 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TestMethod();
    }
    public static void TestMethod(){
        String str1="i like ";
        String str2="girl";
        String str3="i like girl";
        String str4="i like girl";

        String str5=new String("i like girl");
        String str6=new String("i like girl");

        System.out.println(str1==str2);
        System.out.println(str3==str4);
        System.out.println(str3.equals(str4));
        System.out.println(str5.equals(str6));

        System.out.println(str3==str5);

        System.out.println(str3==(str1+str2));     //false
    }
}


总结

(1)“==”比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】 (PS:这不过这个堆地址就放在栈内,也就是引用)
(2)equal用于比较两个对象的值(PS:内容)是否相同【不是比地址】
(3)”==”比”equal”运行速度快,因为”==”只是比较引用.
(4)

【特别注意】

Object类中的equals方法和“==”是一样的,没有区别,而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,所以,当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值