Java中 == 的使用

本文探讨了Java中基本数据类型与引用数据类型使用'=='比较时的不同。对于字符串,'=='比较的是引用地址,而非内容。字符串池的概念解释了为什么常量字符串在内存中的地址相同,而通过new创建的字符串则在内存中有独立的地址。因此,建议避免使用'=='来判断字符串内容相等,应使用equals()方法。
摘要由CSDN通过智能技术生成

==

1.基本数据类型,==判断的是值

        String str1 = "Nev";
		String str2 = "Nev";
		System.out.println(str1 == str2);

结果:

true

2.引用数据类型,==判断的是他们在内存中存放的地址

        String str1 = new String("Nev");
		String str2 = new String("Nev");
		System.out.println(str1 == str2);

结果: 

false

造成这两种情况不同的原因:

字符串池(String Pool)

        String类是我们使用频率非常高的一种对象类型,JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存空间,即字符串池(String Pool)

机制:当创建一个字符串时,JVM首先会去字符串池中查找是否存在该字符串,若不存在,则在字符串池中创建"Nev"这个对象,若字符串池中已存在,则直接将池中"Nev"这个对象的地址返回

        String str1 = "Nev";
		String str2 = "Nev";
		System.out.println(str1 == str2);

对于基本数据类型str1与str2地址相同,结果为:true

对于引用数据类型,字符串是通过new的方式创建对象,虽然最终他们指向的是字符个对象Nev,但因为new,中间被创建出两个不同的String()对象去指向字符串池中的Nev 

        String str1 = new String("Nev");
		String str2 = new String("Nev");
		System.out.println(str1 == str2);

 对于引用数据类型str1与str2地址不相同,结果为:false

总结:不要使用==运算符去检测两个字符串是否相等

        因为==运算符只能够确定这两个字符是否放置在同一个位置上,在逻辑上与我们判断两个字符串的内容是否相等的诉求不匹配,当两个内容相同的多个字符串被放置在不同位置上的时候,使用==运算符去比较得到的答案会是false,会误导我们的判断。如果虚拟机始终将相同内容的字符串共享,就可以达到==去检测字符串内容相等的目的,但事实上却是,只有字符串常量是共享的,即只有字符串常量存在于字符串池里,当我们使用+运算符或substring的方法操作字符串时产生的结果不是共享的,即不是指向于字符串池中,所以千万不要使用使用==运算符去检测两个字符串是否相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值