java吧 关注:1,252,088贴子:12,739,501
  • 10回复贴,共1

怎么去理解用“==”和“equals”比较两个变量的存储,大神请进!

只看楼主收藏回复

String strOne = new String("w");
String strTwo = new String("w");
strOne和strTwo用“==”和“equals”比较我能理解。
返回结果是false和true
==比较的是堆里面对象占用栈里面的内存地址false
equals比较的是堆里面对象的值true
那下面这个呢?
String str1 = "abc", str2 = "abc";
虽然str1==str2和str1.equals(str2)的结果我知道都是true,但是为什么啊?
该怎么去理解?


IP属地:四川1楼2015-11-04 16:44回复
    他的存储形式是怎样的?
    快来人啊!!!


    IP属地:四川2楼2015-11-04 16:49
    回复
      String str1="abc"这样写是将字符串存在常量池里的,str2因为常量池里有所以直接可以用,不用再创建。而new出来的则在堆里存着,new出来的对象地址当然不同。


      IP属地:北京来自Android客户端3楼2015-11-04 16:52
      收起回复
        还是说我可以理解为在初始化str1和str2的时候只创建了一个对象,所以str1和str2所存储的都是对象在堆里所在的首地址?


        IP属地:四川5楼2015-11-04 16:57
        收起回复
          ==一定是同一个对象,而.equal只要是复制的也可以,值相同就行


          IP属地:广东来自Android客户端6楼2015-11-04 18:21
          回复