为了账号安全,请及时绑定邮箱和手机立即绑定

不太懂来人指导下

每次 new 一个字符串就是产生一个新的对象,即便两个字符串的内容相同,使用 ”==” 比较时也为 ”false”  为啥第一个打印出来的是true?

正在回答

5 回答

一种String s1 = "imooc";第二种通过new来创建。第一种的创建方式是在字符串常量池中。将imooc存放到字符串常量池里。s1是引用放在栈里。s1指向常量池的imooc(即s1存放的是imooc的地址)。当我们再次String s2 = "imooc"时。在量池中检查是否存在imooc。如果存在则不会在常量池中再放一个imooc。直接把s2指向imooc。所以s1和s2里面存的地址都是一样的。用==来判断当然返回true喽(==判断的是地址)。相反,new创建的每次new都在堆中放一个字符串进去。(new不就是新的意思吗?哈哈)。所以说第一种是很省空间的,当你需要很多一样的字符串时。希望能明白

7 回复 有任何疑惑可以回复我~
#1

慕粉6364775

解释很好
2016-09-19 回复 有任何疑惑可以回复我~
#2

飒沐_Samuel

很好,第一季留下来的问题终于解决了!
2019-12-05 回复 有任何疑惑可以回复我~

String s1 = "imooc";

String s2 = "imooc";

课件中不是讲解过了嘛,多次出现的字符常量,编译程序只创建一个,所以返回true。

而如果是使用new创建字符串的话,或者修改字符串,指向的内存空间直接不一样,都返回false。


3 回复 有任何疑惑可以回复我~

两个字符串拥有相同的内存地址,只是字符串起的名字不同

String s1 = "imooc";

String s2 = "imooc";

 

String s3 = "imooc";

String s4 = "imooc";

等等,就像你可以给同一事物起不同的名字

        

      


1 回复 有任何疑惑可以回复我~

这是java语言的特性,s1和s2虽然引用不同,但所对应的字符常量一模一样所以也可认为是同一个对象

0 回复 有任何疑惑可以回复我~

懂了......

0 回复 有任何疑惑可以回复我~
#1

金乘三

大神~你懂了 能告诉我一下嘛? 我还不懂......TAT
2016-08-11 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409792    人
  • 解答问题       4340    个

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

进入课程

不太懂来人指导下

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信