专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

浅谈equals和==的区别

浅谈equals和==的区别

一.基本数据类型

对于byte,short,int,long,float,double,char,boolean这八种基本数据,是指存放在中的简单数据段,数据大小确定,内存空间大小可以分配,它们是直接按值存放的,所以可以直接按值访问。他们之间的比较直接选择==,这里直接比较的是他们的值

二.引用数据类型

1、 ==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致。 两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方.
2、 ==比较的是引用而equals方法比较的是内容。

public boolean equals(Object obj)这个方法是由Object对象提供的,可以由子类进行重写。默认的实现只有当对象和自身进行比较时才会返回true,这个时候和==是等价的。**String, BitSet, Date,和File**都对equals方法进行了重写,对两个String对象而言,**值**相等意味着它们包含同样的字符序列。对于基本类型的包装类说,值相等意味着对应的基本类型的值一样。

三.字符串缓冲池

String s1 = "hello";
String s2 = "hello";

System.out.println(s1 == s2);//true
System.out.println(s1.equals(s2));//true
String s1 = "hello";
String s2 = new String("hello");

System.out.println(s1==s2);//false
System.out.println(s1.equals(s2));//true

原来,程序在运行的时候会创建一个字符串缓冲池当使用 s2 = “hello” 这样的表达是创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在第一个程序中,s1先被放到了池中,所以在s2被创建的时候,程序找到了具有相同值的 s1 将s2引用s1所引用的对象”hello”;然而 第二段程序中,使用了 new 操作符,他明白的告诉程序:”我要一个新的!不要旧的!”于是一个新的”hello”Sting对象被创建在内存中。他们的值相同,但是位置不同,由此他们的地址值发生了改变!

101_1.png

文章永久链接:https://tech.souyunku.com/19552

未经允许不得转载:搜云库技术团队 » 浅谈equals和==的区别

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们