IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java中===,和equals()的用法 -> 正文阅读

[Java知识库]Java中===,和equals()的用法

Java中=,==,和equals()的用法

首先是=的用法

“=”在表示的是赋值的意思
在基本类型的使用中,是将"=“后面的值赋值给”=“前面的元素

例如:

public class A {
    public static void main(String[] args) {
        int a,b;
        a=100;
        System.out.println(a);//100

        b=a;
        a=200;
        System.out.println(a);//200
        System.out.println(b);//100

    }
}

我们在基本类型的赋值过程中可以发现,在定义变量a的值之后,将将b=a,此时传过去的是值。所以对a重新赋值是不会影响参数b的。

而引用类型传递的是地址而不是值
例如:

public class C {
    public static void main(String[] args) {
        Map<String,Integer>map1=new HashMap<>();
        map1.put("A",100);
        System.out.println(map1);//A=100

        Map<String,Integer>map2=new HashMap<>();
        map2=map1;
        map1.put("A",200);
        System.out.println(map1);//A=200
        System.out.println(map2);//A=200
    }
}

在上面代码中我们发现,在打印出A的值,map2=map1之后再重新打印map1和map2的值。这时即使是先赋值后改变map1的值,map2的值也随之修改。就是因为此时修改的是地址,而map1和map2共用一个地址,才会造成map2的值发生改变。

但是在使用String类型时,也会出现和基本类型的情况,这是什么原因?

例如:

public class B {
    public static void main(String[] args) {
        String a,b;
        a="A";
        System.out.println(a);//A

        b=a;
        a="A1";
        System.out.println(a);//A1
        System.out.println(b);//A
    }
}

这时我们发现,String是引用类型,但是b并没有跟着a的值走,这是因为String是特殊的引用类型,在赋值上面和基本类型有相同的效果。

==的用法

==代表的是相等,在基本类型中比较的是值相等,在引用类型比较的是地址是否相等

在基本类型中

例如:

public class A {
    public static void main(String[] args) {
        int a=1;
        int b=2;
        System.out.println(a);//1
        System.out.println(b);//2
        System.out.println(a==b);//false
    }
}

此时a==b比较的是值相等

在引用类型中

例如:


public class B {
    public String name;
    public int id;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public static void main(String[] args) {
        B b1=new B();
        b1.setName("小明");
        b1.setId(1);

        System.out.println(b1);//B@1b6d3586
        B b2=new B();
        System.out.println(b1);//B@1b6d3586
        System.out.println(b2);//B@4554617c
        System.out.println(b1==b2);//false

        B b3=new B();
        b3.setName("小明");
        b3.setId(1);
        System.out.println(b1==b3);//false
    }

}

在这个实例当中,打印对象实际上是打印地址, b1==b2实际上比较的是两者的地址,由于是新建了两个对象,开了两个堆也就是两个不同的地址,自然也就不会相等。

如何让两者相等呢?
我们采用equals()方法


public class C {
    public String name;
    public int id;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }


    public static void main(String[] args) {
        C c1=new C();
        c1.setName("小明");
        c1.setId(1);
        System.out.println(c1);//C@1b6d3586

        C c2=new C();
        c2=c1;
        System.out.println(c1.equals(c2));//false
    }
}

此时将c2的内容赋值给c1,而此时equals比较的是两者的值,自然也就相等了。

这也就引出了我们的equals方法
equals方法用于将字符串与指定的对象进行比较
String类中重写了equals()方法,用于比较两个字符串是否相等

也就是说equals()方法适用两个引用类型之间进行比较

例如:

public class D {
    public static void main(String[] args) {
        String a="a";
        String b=a;
        System.out.println(a.equals(b));//true
    }
}

此时两者的值是相等的

扩展:new Integer()和Integer.valueOf()的区别

new Integer()每次都会新建一个对象
Integer.valueOf()每次都会使用缓存池中的对象,多次调用时取的是同一个对象的引用

在这里插入图片描述
其中,第一个为false是因为开了两个对象,也就是开了两个堆,比较两个地址肯定不相等

第二个两者引用的都是同一个缓存池中对象的引用,所以比较两个的地址一定相等

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 11:57:15  更:2022-04-04 11:58:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:43:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码