java 板


LINE

※ 引述《gigigigi (gigigigi)》之铭言: (调整一下原文顺序) : 我查网路Java 无法印address 来判断有人说用hashCode, 但是看到 : hashcode : : 只要求相同对象的 hashcode 一样 : 并不保证不同对象的 hashcode 不一样 : "即,有可能不同对象的 hashcode 是一样的" Hashcode 与记忆体无关,只是拿物件内的成员透过运算得到的一组 int, 基本上我们会要求如果这两个物件在比较时被认为 "内容" 相同的时候, 就必须传回相同的 Hashcode (我自己习惯称为 "内容" 相同) 内容相同是每个 class 自己给予的规则,并不一定是相同的 instance。 例如: 你买了一杯红茶A;你的朋友也买了一杯同样店家甜度冰块的红茶B 你朋友拿着他的红茶B 问你要不要喝;你说我已经有了。 在这里,红茶 A 和红茶 B 是两个不同的东西(instance); 但我们认定他是相同的内容(都是红茶),所以才会说已经有了 : public static String reverse(String originalStr) : { : String *[1;33mresultStr*[m = ""; : ... 处理字串反转存到 resultStr : return *[1;33mresultStr*[m; : } : public static void main(String[] args) throws IOException { : String s = new String("hello world"); : String *[1;36mresult*[m = reverse(s); : System.out.println(Integer.toHexString(result.hashCode())); : System.out.println(result); : } 在 Java 中被产生出来的物件并没有分 local 或者 global 之类的 scope,只要 被生成,在被回收掉之前,都一直存在於记忆体中。 但指向该物件的变数,就会有 scope 的问题,以这里为例子,当程式离开 reverse() 的时候,只有 resultStr 这个变数不存在,但配置出来的 String 还是 存在记忆体之中。 而 main 有用一个 result 去指向这个 instance。 在 Java GC 机制里面,只要有一个 instance 是无法被存取到的时候, 那块记忆体才会被系统收掉。 综合上述,当离开 reverse() 的时候,反转好的字串 instance 因为有被 main() 里面的 result 给指着,所以并不会被视为可回收的对象, 因此会持续存在於记忆体中,而且 main() 里面也可以正确存取到他。 : 在C/C++ 回传区域变数问题 : 想请问一下我下面反转字串例子, : String resultStr = ""; 是 local 变数, : 这样回传回去是把内容 copy 一份回去main() 函数的result? : 应该不是ref? String resultStr = ""; 离开reverse函数应该就回收这块记忆体 : 如果我今天改成 String resultStr = new String(); : 传回是把address 回传去让 result 参考同一块记忆体嘛? Java 中并不会让开发者碰到物件的记忆体,物件在 method 之间传递的时候, 不会 copy 一份真正的物件,而是将 reference 复制一份传递过去。 在 Java 中,物件 Reference 概念比较相当於 C/C++ 的 Pointer,例如: //Java public static main(String[] args) { String str1 = "Java"; doSomething(input); //到这边 str1 还是 "Java" } public static void doSomething(String input) { input = "QQ"; } //C,C++ int main() { chat* str1 = "Java"; doSomething(str1); // str1 还是 "Java" } void doSomething(char* input) { input = "QQ"; } : 完整程式码 : https://gist.github.com/shihyu/e6acfc206928b2cbb3011ea193fe1c4f : 谢谢 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.254.65.65
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1537607019.A.8F5.html ※ 编辑: darkk6 (111.254.65.65), 09/22/2018 17:05:06
1F:推 evo1994: 讲的很清楚 推~ 09/25 01:38
2F:推 highland: 推推~ 09/26 14:44
3F:推 GGing: 那如果今天传进去的是 Collection 呢? 09/28 05:32
4F:→ adrianshum: 楼上:也一样呀,也是传copy of pointer 进去 09/28 08:16







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP