查看: 3334| 回复: 35
跳转到指定楼层
上一主题 下一主题
收起左侧

[学Java/C#] 再来一个Java reference的问题

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
比如,

String a = "hello";
String b = new String("hellow");

String M = "hello";


我明白 a 不等于 b,因为是不同的reference指向不同的object

但为啥 a == M??  因为他们指向同一个object吗? 问题来了,如果a和M指向同一个object,a就必须要跟M相等吗? 我之前的理解是a和M分别代表两个不同的reference,只是他们指向同一个obeject而已

求解~

上一篇:Java 字节的意义
下一篇:讨论一下1060. Missing Element in Sorted Array,互相加米
全局:
这个图讲的很明白啦

补充内容 (2020-4-9 22:32):
给所有看不到的小伙伴:
https://www.cnblogs.com/niew/p/9597379.html

image.png (457.94 KB, 下载次数: 0)

image.png

评分

参与人数 5大米 +8 收起 理由
yuanyuandd + 2 很有用的信息!
andrew.denver + 1 看不到图,求这个图的链接
mchzh + 3 给你点个赞!
Cantarella + 1 赞一个
totolin + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

推荐
x1nian 2020-4-10 00:49:43 | 只看该作者
全局:
andrew.denver 发表于 2020-4-9 05:36
到底是比较reference还是memory location啊?

可否存在,两个不同的reference,指向同一个memory loc ...

new 是在内存堆里创建一个全新的char array,并且赋值'h','e','l','l','o'.
a和M他们全部指向"hello"这块区域.

比如String a[] = new String[] {"1","2"};   //在内存堆里创建一个String数组
String b[] = a;   //创建b指向a
String c[] = a;   //创建c指向a
那么b和c的内存地址相等.

new关键字是在内存堆里创建全新的空间.
= 某个object是指向那个空间的地址
回复

使用道具 举报

推荐
waterine 2020-4-9 15:21:21 | 只看该作者
全局:
andrew.denver 发表于 2020-4-9 08:06
你确定吗? Java的reference就直接是内存的物理地址吗?

在这个讨论中,指针/引用指向的是物理地址还是虚拟地址并不重要。当我们说两个指针/引用相等的时候,意思就是他们指向的位置相等,而不是两个指针本身的内存位置相等,内存位置相等它们就是同一个指针而不是两个指针了。
回复

使用道具 举报

🔗
Peon 2020-4-8 15:51:35 来自APP | 只看该作者
全局:
字符串常量池 百度谷歌搜搜看看
回复

使用道具 举报

全局:
New Primitive type -> heap
Primitive type -> stack
回复

使用道具 举报

🔗
 楼主| andrew.denver 2020-4-9 01:51:30 | 只看该作者
全局:
Peon 发表于 2020-4-8 15:51
字符串常量池 百度谷歌搜搜看看

深入了解Java字符串常量池  
https://zhuanlan.zhihu.com/p/52710835

我知道这个啊,但是,常亮池里面的元素,只能最后又一个reference指向他吗? (就算有多个reference,他们全部是相等的???)
回复

使用道具 举报

🔗
zebointexas 2020-4-9 01:52:00 | 只看该作者
全局:
freeinstance 发表于 2020-4-8 23:19
New Primitive type -> heap
Primitive type -> stack

没懂您的意思,可以详细说一下吗?  
回复

使用道具 举报

全局:
zebointexas 发表于 2020/04/09 01:52:00
没懂您的意思,可以详细说一下吗?
Heap 和stack 有啥区别?
回复

使用道具 举报

🔗
 楼主| andrew.denver 2020-4-9 02:17:25 | 只看该作者
全局:
freeinstance 发表于 2020-4-9 02:05
Heap 和stack 有啥区别?

堆(heap)和栈(stack)有什么区别?   
https://blog.csdn.net/mybelief321/article/details/8912736

JAVA中Stack和Heap的区别
https://blog.csdn.net/wl_ldy/article/details/5935528
回复

使用道具 举报

🔗
yyy884849 2020-4-9 03:41:30 | 只看该作者
全局:
Because the == operator in JAVA compares reference or memory location of objects in the heap, whether they point to the same location or not.
回复

使用道具 举报

🔗
laoxie09 2020-4-9 04:27:21 | 只看该作者
全局:
楼主可以google一下 String pool
回复

使用道具 举报

🔗
 楼主| andrew.denver 2020-4-9 05:36:45 | 只看该作者
全局:
yyy884849 发表于 2020-4-9 03:41
Because the == operator in JAVA compares reference or memory location of objects in the heap, whethe ...

到底是比较reference还是memory location啊?

可否存在,两个不同的reference,指向同一个memory location呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表