Java字符串

liu15073458538 2017-02-10 12:07:23

public class TestString {

@Test
public void test(){
String str1 = "JavaEE";
String str2 = "JavaEE";
String str3 = new String("JavaEE");
String str4 = "JavaEE" + "Android";
String str5 = "Android";
String str6 = str1 + str5;
str5 = str5 + "handoop";
String str7 = str6.intern();
String str8 = "JavaEEAndroid";

System.out.println(str1 == str2);//true
System.out.println(str1 == str3);//false
System.out.println(str1.equals(str3));//true

System.out.println(str4 == str6);//false
System.out.println(str4.equals(str6));//true
System.out.println(str7 == str4);//true
System.out.println(str4 == str8);//true

}

}

System.out.println(str4 == str6);//false 这里为什么是false?求解
...全文
352 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
JohnSession 2017-02-14
  • 打赏
  • 举报
回复
str4是在编译期就确定的值,为"JavaEEAndroid" str6的内存地址不等于str4中的内存地地址;
lsy873792170 2017-02-13
  • 打赏
  • 举报
回复
只是文本内容一样,但是是不同的两个对象。所以是FALSE
haowuzi 2017-02-12
  • 打赏
  • 举报
回复
str4指向一个内存地址,str6指向两个不同的内存地址。equals判断str4与str6值相等,==是用来判断内存地址的,所以不相等。求给分
什么都不能 2017-02-12
  • 打赏
  • 举报
回复
引用内存的地址不一样,所以是false
叶旅魂途 2017-02-12
  • 打赏
  • 举报
回复
==号是内存地址判断 ,很明显str4 str6是两个地址空间,.equals 是比较toString的值是否相等.
爱睡觉的阿狸 2017-02-10
  • 打赏
  • 举报
回复
str4是在编译期就确定的值,为"JavaEEAndroid" str6涉及到变量的操作,编译期不确定具体值,加号两边在运行时会转换成new StringBuilder(str1).append(str5).toString(),而这个会产生一个新的字符串对象,所以与str4不相等。
majinding888 2017-02-10
  • 打赏
  • 举报
回复
对于字符串: 其对象的引用都是存储在栈中的, 如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中, 如果是运行期(new出来的)才能确定的就存储在堆中。 对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份
wangweicai 2017-02-10
  • 打赏
  • 举报
回复
String类型是类,那么str4和str6就是String类型的不同的实例,当使用==进行比较时,实际上是对是不是同一个实例进行的比较,不同的实例即便内容相同,返回的也是false,如果想判断内容是否相同而不是实例是否相同时,需要使用String类的equals函数来判断。

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧