java中字符串比较==和equals
1 总体来说java中字符串的比较是==比较引用,equals 比较值的做法。(equals 对于其他引用类型比较的是地址,这是因为object的equals方法比较的是引用),但是不同的声明方法字符串的比较结果也是不同的。
例如: String str1=new String("a");
String str2=new String("a");
str1==str2 输出false
str1.equals(str2) 输出true
而如果这样声明
String str1="a";
String str2="a";
str1==str2 输出true
str1.equals(str2) 输出true
这是因为 equals 方法本来也是比较引用的 字符串类在实现的时候重写了该方法, 第一种声明方法等于是声明了两个对象,用’==‘比较是时候比较的是引用输出的是false 由于他们的值相同用equals的时候就比较的是值了,输出true。
而第二种情况不是因为比较有与第一种有差异,而是因为声明有差异,第二种声明方法在声明的时候有堆或堆栈 共用的现象,也就是说 在声明的时候如果如果声明为类属性他会检查在堆栈中有没有与现在声明的是相同结构的字符串。如果有就直接将地址指向已有内存地址。声明在方法内部的局部变量原理一样只不过他是堆栈共享。
对应上面是示例:
第一种情况:
(1) 声明一个string类型的对象 str1,这个操作会在内存中示例化一个string类型的对象。
(2) 再声明一个String类型的对象str2,这个操作会在内存中示例化另一个String类型的对象,与第一个对象相互独立。
(3)比较两个对象的引用,因为他们是相互独立的所以输出false
(4)比较两个对象的值,他们虽然是独立的内存区域但是有共同的内存结构(值),输出true
第二种情况:
(1)声明一个字符串str1 会示例化一个String类型的对象。
(2)声明另一个字符串 ,现在会检查在同一作用域中有没有相同的内存结构的变量,如果有就直接将将地址指向他。
(3)==比较他们有相同的地址,
(4)equals比较他们有相同的内存结构(值)。
java中字符串比较==和equals的更多相关文章
- JAVA中字符串比較equals()和equalsIgnoreCase()的差别
.使用equals( )方法比較两个字符串是否相等.它具有例如以下的一般形式: boolean equals(Object str) 这里str是一个用来与调用字符串(String)对象做比較的字符串 ...
- java中字符串的非空判断
问题如下:在java 中 字符串为null 如何判断String str;if(str==null) ??str.equal("null") ?? 答:我觉得应该搞清楚字符串对象和 ...
- Java中字符串相等与大小比较
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- Java中字符串string的数据类型
Java中字符串string的数据类型 时间:2017-07-03 08:01:47 YuanMxy 原文:https://blog.csdn.net/YuanMxy/article/details/ ...
- Java中字符串相等与大小比較
在C++中,两个字符串比較的代码能够为: (string1==string2) 但在java中,这个代码即使在两个字符串全然同样的情况下也会返回false Java中必须使用string1.equal ...
- Java中字符串的一些常用操作方法
package test; public class maintest {public static void main(String[] args) {String str = "a ...
- 三张图彻底了解Java中字符串的不变性
转载: 三张图彻底了解Java中字符串的不变性 定义一个字符串 String s = "abcd"; s中保存了string对象的引用.下面的箭头可以理解为"存储他的引用 ...
- java中字符串String 转 int(转)
java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...
- 【转】Java中字符串中子串的查找共有四种方法(indexof())
原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下:1.int ...
随机推荐
- 点云处理软件Pointscene
转载于PCL中国:点云处理软件Pointscene 软件官网:https://pointscene.com/ 笔者评: Pointscene是目前的点云处理软件之一,其主要是操作简单直观 ...
- mysql手册操作
1.show table status 显示表状态 2.VERSION() 版本:CURRENT_DATE 当前日期: NOW() 当前时间:USER 当前用户 3.GRANT A ...
- [读书笔记]-技术学习-Redis
1:Redis概览 Remote Dictionary Server 远程字典服务 Redis是基于内存的存储 在一台普通的笔记本上,Redis每秒的读取速度可以达到10万 内存读取数据,断电的时候数 ...
- Swift进阶之内存模型和方法调度
前言 Apple今年推出了Swift3.0,较2.3来说,3.0是一次重大的升级.关于这次更新,在这里都可以找到,最主要的还是提高了Swift的性能,优化了Swift API的设计(命名)规范. 前段 ...
- PHP实现几秒前、几分钟前、几小时前、几天前
/** * @Description: 将时间转换为几秒前.几分钟前.几小时前.几天前 * @Author: Yang * @param $the_time 需要转换的时间 * @return str ...
- python中字节与字符串的转换
#bytes object byte = b"byte example" # str object str = "str example" ...
- Cocos2d+C++运行出现中断的解决方法
原因是引入外部的文件不存在问题,一般是路径问题,例如引入的图片文件路径不存在.
- 08.Web服务器-2.HTTP协议介绍
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF ...
- POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)
手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn.net/suncongbo/article/details/79382991 题目链接: (p ...
- 【Mail.Ru Cup 2018 Round 2 C】 Lucky Days
[链接] 我是链接,点我呀:) [题意] [题解] 题解的作者: manish_joshi 对于任意一个k 因为那条直线(关于x,y的方程可以看出一条直线)的斜率>= 所以肯定会经过第一象限. ...