字符串的一些问题

A: 
String str1 = "java"; 
String str2 = "java"; 
System.out.print(str1==str2); 
输出:true; 
关键点:==比较引用,equals比较内容,JVM的常量池可以节省内存开销。 
B: 
String str1 = new String("java"); 
String str2 = new String("java"); 
System.out.print(str1==str2); 
输出:false; 
关键点:A中的方式是在常量池中创建“java”对象,但是通过new,JVM会在堆中分配空间。 
C: 
String str1 = "java"; 
String str2 = "blog"; 
String s = str1+str2; 
System.out.print(s=="javablog"); 
输出:false; 
关键点:字符串常量池是编译时创建,String s=str1+str2运行时才能知道;即str1+str2是在堆里创建的,s引用当然不可能指向字符串常量池里的对象。 
D: 
String s1 = "java"; 
String s2 = new String("java"); 
System.out.print(s1.intern()==s2.intern()); 
输出:true; 
关键点:intern方法~参考jdk文档;通过它可以比较字符串的内容 
E: 
String str1 = "java"; 
String str2 = new String("java"); 
System.out.print(str1.equals(str2)); 
无论在常量池还是堆中的对象,用equals()方法比较的就是内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值