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. ...
随机推荐
- jQuery使用工具集
//jq-util.js$.extend({ Util:{ /* 浏览器 */ browser:{ IE: !!document.all, IE6: !!document.all && ...
- 理解OAuth2
目录 理解OAuth2 Oatuh2用来做什么 Oauth2具体做法 Oauth2的流程 授权码模式 第三方引导用户跳转至认证服务器的授权页面 用户选择是否给予授权 认证服务器生成code并且让用户重 ...
- SpringCloud微服务实现生产者消费者+ribbon负载均衡
一.生产者springcloud_eureka_provider (1)目录展示 (2)导入依赖 <dependency> <groupId>org.springframewo ...
- Jenkins之自动部署、代码安全扫描、自动化接口测试
搭建Jenkins wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.reporpm --i ...
- Oracle - exp实战
一.概述 exp/imp是oracle中的一个逻辑导出和导入工具,假想一个场景,当我们使用exp命令在对用户进行导出的时候,如果该用户中的某些表的数据有修改,或表结构进行了修改,或者表被删除,那么我们 ...
- idea个性化配置
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- [转]UIpath advanced certification dumps
本文转自:https://dotnetbasic.com/2019/06/uipath-advanced-certification-dumps.html UiPath advanced certif ...
- Maven简介与使用
Maven介绍 Maven是项目管理工具,对软件项目提供构建与依赖管理 Mavan是Apache下的Java开源项目 Mavan为Java项目提供了统一的管理方式,已成为业界标准 Maven核心特性 ...
- MySQL5.7脚本自动安装
脚本里面没有把同步时间写进去,这个写在最前面yum install -y ntp ntpdatecp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localti ...
- Python升级后ssl模块不可用问题解决和浅析
在Cent0S 7.5下将Python 2.7.5升级到Python 3.6.6后,发现ssl模块不可用,具体详细信息如下所示: [root@db-server ~]# pip list Packag ...