看懂JAVA中String字符串比较大小

字符串在比较大小的时候,一般采用equals,equels比较的是字符串的内容是否相同。

虽然平时基本不会用 == 比较字符串的大小,但是使用 == 比较字符串大小可以学到很多知识。== 比较的是内存地址。

String s1 = "ab";
// 首先会在常量池中查找是否存在ab这个字符串,如果不存在就会创建,如果存在就直接引用。

String s2 = new String("ab");
// 会在堆内存中创建一个新的对象,与常量池中的字符串变量不是同一个位置。

System.out.println(s1==s2);
// false,因为所在的位置都不同,s1在常量池中,s2在堆内存中。

String s3 = "ab";
// 直接引用常量池中的ab字符串

System.out.println(s1==s3);
// true,s1和s3都是指向常量池中相同的对象

String s4 = new String("ab");

System.out.println(s2==s4);
// false, s2和s4都是堆内存中的对象,但是他们new时都会在堆内存中创建一个新的对象,所以不是同一个对象。

接下来时字符串拼接比较大小

String s1 = "ab";
String s2 = "cd";
String s3 = "abcd";
String s4 = "ab"+"cd";
String s5 = s1+s2;

System.out.println(s3=s4);
// true,s4是两个字符串常量进行拼接,在字符串常量拼接时会进行常量池优化,优化后的常量是abcd,所以s4指向的是常量池中abcd字符串。s3也指向常量池中abcd的字符串。

System.out.println(s3=s5);
// false,s5=s1+s2,因为s1和s2是对象,他们是指向常量池的引用,在拼接时不会进行常量池优化,会在堆内存中创建一个新的对象。


final String s7 = "ab";
final String s8 = "cd";
String s9 = s7+s8;

System.out.println(s3=s9);
// true,使用final定义的s7和s8,所以s7和s8是常量,在相加时会进行常量池优化,所以s9指向常量池中的abcd,所以s9与s3相同。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值