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

字符串提问

String S1=“imooc”;

String S2=new String("imooc");


请问S1与S2区别在哪?

正在回答

5 回答

没区别,一个是直接定义,另一个是通过创建一个对象的方式进行定义

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

菜鸟的羽毛 提问者

非常感谢!
2016-08-11 回复 有任何疑惑可以回复我~

是有区别,学语言最怕得过且过。

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

区别在于,第一个在字符串常量池中创建。第二个实际在堆上。如果用==来比较两个字符串返回的是false。应为==是比较地址。字符串常量池不是栈哦

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

http://img1.sycdn.imooc.com//57b977160001535706670339.jpg这实例化种方法一般会在堆内存中开辟两个空间,只用一个,比较浪费资源;所以一般采用直接赋值法


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

个人感觉是通过S1的方式创建的字符串是存放在栈区中的,而S2的创建方式是创建在堆中的,所以二者地址不一样,使用==得到的也是false

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

菜鸟的羽毛 提问者

什么是栈区?什么是堆区?
2016-08-11 回复 有任何疑惑可以回复我~
#2

木吉他__秋 回复 菜鸟的羽毛 提问者

额...看看数据结构或者百度一下吧
2016-08-11 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

字符串提问

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