博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中字符串的比较
阅读量:2387 次
发布时间:2019-05-10

本文共 863 字,大约阅读时间需要 2 分钟。

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比较他们有相同的内存结构(值)。

转载地址:http://upiab.baihongyu.com/

你可能感兴趣的文章
nginx Remote Source Code Disclosure and Denial of Service Vulnerabilities
查看>>
Anti-sec安全培训 部分试看视频
查看>>
FreeBSD kernel NFS client local vulnerabilities
查看>>
JXplorer 的简单使用
查看>>
如何启用 LDAP 签名 Windows Server 2008 中
查看>>
获取ngnix,apache,php,mysql的编译参数 zz from xi4oyu
查看>>
使用ettercap嗅探ssh口令
查看>>
Linux下的内网反弹实例
查看>>
Command execution with a MySQL UDF
查看>>
OTPs: Using s/Key with SSH via OPIE
查看>>
使用arpwatch和arping来排查ARP攻击
查看>>
Linux硬件监控方法
查看>>
RSA SecurID Authentication linux sshd PAM deploy
查看>>
转: pam 禁止某些用户使用ssh 远程登录
查看>>
小包优先+web优先+游戏爆发+单IP限速+连接数限制 脚本V2.0
查看>>
Rhel5 配置NTP服务
查看>>
定制rhel的stage2.img/minstg2.img文件
查看>>
ZZ Quick-Tip: Linux NAT in Four Steps using iptables
查看>>
北京的住房公积金是否可用于还外地的房贷
查看>>
mysqlhotcopy 热备工具体验与总结
查看>>