关于String,==运算符和equals方法如何理解?

smile_life_ 2016-11-28 07:15:38
String name = "a";
String name1 = new String("a");

以上代码一共建立了几个对象?分别保存在哪里?什么保存在栈,什么保存在堆,什么保存在常量池?

...全文
402 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianchaoyuan 2016-12-06
  • 打赏
  • 举报
回复
姓小名白丶 2016-11-29
  • 打赏
  • 举报
回复
一、引用变量与对象:除了一些早期的Java书籍和现在的垃圾书籍,人们都可以从中比较清楚地学习到两者的区别。 A aa; 这个语句声明一个类A的引用变量aa[我们常常称之为句柄],而对象一般通过new创建。所以题目中s仅仅是一个引用变量,它不是对象。 二、Java中所有的字符串文字[字符串常量]都是一个String的对象。有人[特别是C程序员]在一些场合喜欢把字符串"当作/看成"字符数组,这也没有办法,因为字符串与字符数组存在一些内在的联系。事实上,它与字符数组是两种完全不同的对象。 http://blog.csdn.net/john2522/article/details/7437120?locationNum=3&fps=1
爱睡觉的阿狸 2016-11-29
  • 打赏
  • 举报
回复
2个对象,前者位于常量池,后者位于堆中。 ==你可以认为引用数据类型比较的是内存地址是否相同,基本类型比较值是否相同,而equals则根据每个类实现不同而有所不同,比如String的equals是比较内容是否相同,而Object的equals方法仅仅是对==的封装。
vswen5 2016-11-29
  • 打赏
  • 举报
回复
看到这种问题 就反感 有啥好问的百度啊 都写烂了
webnonono 2016-11-29
  • 打赏
  • 举报
回复
引用 1 楼 webnonono 的回复:
==在面对两个string对象时比较的是两个的哈希值吧!equals则是可以比较两个字符串的值. 如String str1 = new String("dsd"); String str2 = new String("dsd"); if(str1==str2){ System.out.println("你丫的"); } 结果是false
不好意思!写错了!不是哈希值!而是内存地址
nikyotensai 2016-11-29
  • 打赏
  • 举报
回复
这种知道了没意义,记得以后比较字符串都用equals就对了
webnonono 2016-11-29
  • 打赏
  • 举报
回复
应该是两个!第一个在常量池新建一个"a",然后下一个的时候String name1 = new String("a");JVM先判断常量池中是否有"a"对象,发现有,然后直接使用这个对象,然后让引用name1指向它.
webnonono 2016-11-29
  • 打赏
  • 举报
回复
==在面对两个string对象时比较的是两个的哈希值吧!equals则是可以比较两个字符串的值. 如String str1 = new String("dsd"); String str2 = new String("dsd"); if(str1==str2){ System.out.println("你丫的"); } 结果是false
NewshiJ 2016-11-29
  • 打赏
  • 举报
回复
可以这么理解 == 比较是否为同一个内存地址的对象 equals 比较两个对象的值是否相同 string类型一般使用equals方法

62,628

社区成员

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

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