Object.equals 和 String.equals的区别
一. 源码展示:
1. Object.equals:
①引用类型地址值比较,直接返回结果:true || false
public class Object {
public boolean equals(Object obj) {
return (this == obj);
}
}
2. String.equals:
① 判断地址值是否相等,若相等 返回 true,若不等则进入下列判断 ;
② 判断参数是否为String类型,若不是 返回false,若是则进入下列判断;
③ 判断字符串长度是否相等,若不等 返回false,若相等则进入下列判断 ;
④ 判断索引位置的字符是否相同,若不等 返回false,若相等,则返回true;
- 字符串的内容相等指的是字符序列完全相同,包括字符的顺序和大小写敏感。
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
private final char value[];
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
}
二. 二者区别
1. 作用域:
Object类是Java中所有类的基类,因此每个对象都继承了equals()方法,自定义实例对象默认使用Object.equals()比较值是否相等,且可以通过重写equals() 实现自定义比较。
String类是Java中的一个内置类,它代表字符串对象,String重写了Object的equals()方法,仅用于做String字符串的值比较。
2. 比较方式:
Object.equals() 比较的是对象的引用是否相同。
String.equals() 比较的是字符串的内容是否相同。
三. 代码层面展示
public static void main(String[] args) {
Object obj1 = new Object();
Object obj2 = new Object();
System.out.println("Object地址值比较:" + obj1.equals(obj2)); // 输出结果: false
String str1 = "Hello";
String str2 = "hello";
String str3 = " hello ";
String str4 = new String("Hello");
System.out.println("Hello::hello比较(区分大小写):" + str1.equals(str2)); // 输出结果: false
System.out.println("Hello:: hello (前后存在空格):" + str1.equals(str3)); // 输出结果: false
System.out.println("比较常量池(使用new操作符):" + str1.equals(str4)); // 输出结果: true
}
打印输出:
Object地址值比较:false
Hello::hello比较(区分大小写):false
Hello:: hello (前后存在空格):false
比较常量池(使用new操作符):true
四. 拓展
String常量池:
在Java中,String常量池是一种特殊的内存区域,用于存储字符串常量。它是为了节省内存空间和提高性能而设计的。
当我们使用字符串字面值创建一个字符串对象时,Java编译器会首先检查字符串常量池中是否已经存在相同内容的字符串。如果存在,则返回常量池中的引用;如果不存在,则在常量池中创建一个新的字符串对象,并返回该引用。
由于String类是不可变的,也就是说一旦创建了字符串对象,它的内容就不能被改变。因此,多个字符串对象可以共享同一个字符串常量池中的内容,这样可以减少内存的占用。
需要注意的是,通过调用String的intern()方法可以将一个字符串对象加入到常量池中,并返回常量池中的引用。这在某些场景下可能会有用,但要谨慎使用以避免不必要的内存开销。
总之,String常量池是Java中用于存储字符串常量的特殊内存区域,可以提高内存利用率和程序性能。
Object.equals 和 String.equals的区别的更多相关文章
- Java中Object.equals和String.equals的区别详解
前言 Java中的堆和常量池的区别是什么呢?Object.equals与String.equals的区别呢?下面让我们通过一个小示例让你明白它- 1.基础知识 Java的存储空间:寄存器.栈.堆.静态 ...
- String使用机制及string.equals()和==的区别(转)
http://904582819.blog.163.com/blog/static/11159282020127794456840/ equals方法和==的区别 首先大家知道,String既可以 ...
- java基础18 String字符串和Object类(以及“equals” 和 “==”的解析)
一.String字符串 问:笔试题:new String("abc")创建了几个对象?答:两个对象,一个对象是 位于堆内存,一个对象位于字符串常量池 class Demo17 { ...
- Java中"String.equals()“和"=="的区别
Do NOT use the `==`` operator to test whether two strings are equal! It only determines whether or n ...
- Java中equals与==和comparaTo的区别
一.先说说Java中equals和==的区别: Java中的数据类型,可分为两类: 1.基本数据类型(也叫原始数据类型) 八大基本数据类型 char byte short int long doubl ...
- 【Java学习笔记之二十九】Java中的"equals"和"=="的用法及区别
Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: String str1 = new String(" ...
- 程序员必须搞清的概念-equals和=和hashcode的区别
1. 首先equals()和hashcode的介绍 equals 方法在非空对象引用上实现相等关系: * 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true. * 对称性:对于 ...
- "=="和 equals 方法究竟有什么区别?
"=="和 equals 方法究竟有什么区别? ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同, 要比较两个基本类型的数据或两个引 ...
- (转)Java中equals和==、hashcode的区别
背景:学习辉哥总结的基础知识,从头来,直面短板. 1 问题引入及分析 请看下面的代码清单1 @Test public void test01() { String a = "a" ...
- 【转】彻底弄懂Java中的equals()方法以及与"=="的区别
彻底弄懂Java中的equals()方法以及与"=="的区别 一.问题描述:今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差. ...
随机推荐
- c/c++快乐算法第一天
c/c++感受算法乐趣(1) 开始时间2023-04-14 18:31:47 结束时间2023-04-14 22:06:02 前言:经过两天的学习,是不是发现编程也挺简单的.其实不然,学好算法同时也是 ...
- Nginx常用配置及和基本功能讲解
作者:京东物流 殷世杰 Nginx已经广泛应用于J-one和Jdos的环境部署上,本文对Nginx的常用的配置和基本功能进行讲解,适合Nginx入门学习. 1 核心配置 找到Nginx安装目录下的co ...
- Solon 统一的返回结果调整
使用 "统一的渲染控制" 可以对输出做统一的控制外...还可以借助路由拦截器 RouterInterceptor ,对 mvc 返回结果做提交确认机制(即可修改)进行控制(相对来讲 ...
- OData WebAPI实践-OData与EDM
本文属于 OData 系列 引言 在 OData 中,EDM(Entity Data Model) 代表"实体数据模型",它是一种用于表示 Web API 中的结构化数据的格式.E ...
- selenium配置远程测试环境
开头 因为测试的时候需要不断打开浏览器,这样效率感觉不高,于是想着能不能开启一个浏览器,然后通过代码直接链接来调试就好了. 前提 要先安装好selenium 和 会查看配置自己的google版本和路径 ...
- 2023-04-14:n对情侣坐在连续排列的 2n 个座位上,想要牵到对方的手, 人和座位由一个整数数组 row 表示,其中 row[i] 是坐在第 i 个座位上的人的ID, 情侣们按顺序编号,第一对
2023-04-14:n对情侣坐在连续排列的 2n 个座位上,想要牵到对方的手, 人和座位由一个整数数组 row 表示,其中 row[i] 是坐在第 i 个座位上的人的ID, 情侣们按顺序编号,第一对 ...
- 2022-03-17:所有黑洞的中心点记录在holes数组里, 比如[[3,5] [6,9]]表示,第一个黑洞在(3,5),第二个黑洞在(6,9), 并且所有黑洞的中心点都在左下角(0,0),右上角(
2022-03-17:所有黑洞的中心点记录在holes数组里, 比如[[3,5] [6,9]]表示,第一个黑洞在(3,5),第二个黑洞在(6,9), 并且所有黑洞的中心点都在左下角(0,0),右上角( ...
- ChatGPT 是否会夺走人们的工作
ChatGPT 是否会夺走人们的工作? 最近,以 ChatGPT 为代表的人工智能项目在自然语言处理这一领域得到了一些突破性的进展,重新引发了人们对于"人工智能会抢走人类工作机会" ...
- hosts文件妙用,提升网站访问速度!
一.背景 在讲解hosts文件之前,我们先了解下IP地址与域名的关系. 1.IP地址与域名的关系 IP(Internet Protocol)是一种规定互联网中数据传输的协议,每台连接到互联网中的计算机 ...
- Rust的语句与表达式
Rust 语句与表达式 Rust 中的语法分为两大类: 语句 (statement) 和表达式 (Expression). 语句:指的是要执行的一些操作和产生副作用的表达式. 表达式:主要用于计算求值 ...