String类型中 "=="和"equals"比较的差别
String类型中 "=="和"equals"比较的差别
先说明一下String类型的变量的创建方式
在创建新的String类型的变量时,首先会在缓冲区查找是否有这个产量对应的对象,有就直接将找到的对象的地址赋给新创建的变量,没有就重新创建一个对象,然后赋给新创建的变量
String str = "str";//创建一个新的String类型的变量,在已有的缓冲区中没有就重新创建一个
String str1 = "str";//创建时在缓冲区发现有和即将创建的值一样的对象,就将str的地址赋给str1
str == str1;//true
String str2 = new String("str");//强制创建一个对象str2,地址和str,str1不同
str2 == str;//false因为==比较的是对象的地址,而二者地址不同,故为false
str2 == str1;//false同上
str2.equals(str1);//true String继承Object方法中的equals方法进行重写,内部比较是两个String类型的字符串一个一个字符的比较(下边是源码)
str2.eauals(str);//true同上
public boolean equals(Object anObject) {//String类中equals源码
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;
}
其他类型 "=="和"equals"的比较
所有的类都继承了Object类,Object类中有一个equals方法,源码如下
public boolean equals(Object obj) {
return (this == obj);
}
"=="比较的就是引用对象的地址是否相等,而不是比较值,比较值的话就需要重写equals方法
对于基本数据类型只能用"==",比较的是两个基本类型的值
String类型中 "=="和"equals"比较的差别的更多相关文章
- 关于String类型中==和equals的区别。
"=="操作符的作用 1.用于基本数据类型的比较,比较的是值. 2.用于比较对象,判断对象的引用是否指向堆内存的同一块地址. equals的作用 用于比较两个对象的内容是否相同 代 ...
- String类型中"=="和"equals"的区别
"=="比较的是两个字符串的内存地址. "equals"比较的是两个字符串的实际值. 例子1. String s1="abc"; Stri ...
- 【原创】Java和C#下String类型中的==和equals的原理与区别
一.Java下 1.几个例子 public static void main(String[] arge) { String str1 = new String("1234"); ...
- 码农带你区分String类型的"=="和equals()
大家玩csdn也可以关注我的博客额http://blog.csdn.net/wujiandong25253344 情形一: String s1= new String("hello" ...
- String类中"=="、equals和普通类中"=="、equals的比较
package cn.method.demo; public class StringDemo2 { public static void main(String[] args) { String s ...
- String类中的equals()方法:
String类中的equals()方法: public boolean equals(Object anObject) { //如果是同一个对象 if (this == anObject) { ret ...
- String类中的equals是如何重写的
我们知道String中的equals方法是被重写过的,因为object的equals方法是比较的对象的内存地址,而String的equals方法比较的是对象的值. 首先几个知识点: 基本数据类型==比 ...
- Redis系列(四):数据结构String类型中基本操作命令和源码解析
1.介绍 string类型本质上是char[]数组的封装 中文网:http://www.redis.cn/commands.html#string 2.常用命令 set 命令 set命令的时间复杂 ...
- String类型中ToString hashCode equals compareTo等方法的经典实现
private final char value[]; private int hash; // Default to 0 public String(String original) { this. ...
随机推荐
- 编译安装基于 fastcgi 模式的多虚拟主机的wordpress和discuz的LAMP架构
目录 实现CentOS 7 编译安装基于 fastcgi 模式的多虚拟主机的wordpress和discuz的LAMP架构 准备环境: 准备软件版本: 主机名修改用以区分 数据库服务器 实现数据库二进 ...
- MQ报错2009/2085解决方法
1.1. 响应2009错误 1.1.1. 涉及协议 MQ,调试回放阶段 1.1.2. 错误信息 完成码2原因为2009 1.1.3. 可能原因 远端MQ连接数不足,拒绝连接 1.1.4. ...
- 图像处理之C语言实现二维卷积
在用C语言实现图像处理中,经常要用到二维卷积的运算,这个在matlab中是非常容易实现的,只需要conv2()就OK啦,而且速度非常的快.但是在C语言中就需要四层的for循环来实现了. 首先二维卷积的 ...
- 一起学SpringMVC之Request方式
本文主要以一些简单的小例子,简述在SpringMVC开发过程中,经常用到的Request方面的内容,仅供学习分享使用,如有不足之处,还请指正. 概述 在客户机和服务器之间进行请求-响应时,两种最常被用 ...
- SVN安装简介
博主最近换个份工作,代码管理用的是SVN,因为之前用的Git管理代码的,SVN没接触过,既然公司中要用,就学习下使用吧.从最基本的安装开始吧. SVN官网:https://tortoisesvn.ne ...
- 超实用的JS数组去重
一.简单的去重方法,利用数组indexOf方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...
- C lang:programe flow
C language flow Xx_a Introduction C language flow,control program order. Xx_b Foundation satement:fo ...
- 【好书推荐】《剑指Offer》之硬技能(编程题12~16)
本文例子完整源码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/sword <[好书推荐]& ...
- PHP $_SERVER超全局变量详解
参考资料:https://www.php.net/manual/zh/reserved.variables.server.php $_SERVER 是一个包含了诸如头信息(header).路径(pat ...
- GNN 相关资料记录;GCN 与 graph embedding 相关调研
最近做了一些和gnn相关的工作,经常听到GCN 和 embedding 相关技术,感觉很是困惑,所以写下此博客,对相关知识进行索引和记录: 参考链接: https://www.toutiao.com/ ...