java 板


LINE

※ 引述《qrtt1 (thinking in java)》之铭言: : ※ 引述《jackyhuang (雪.狼.湖)》之铭言: : alias是很重要的一个观念。 : 因为若不了解则在使用物件时可能隐藏了bug : 详细解说请参考thinking in java,前面介绍reference的章节, : 与附录介绍clone的章节 你和我对alias的对象指的不一样 我说你写"reference alias"会混淆的原因 是因为会让人以为是"reference's alias" 而书上写的是"alias a reference to an object" : java中唯一有operator overload的物件只有String : 唯一合法改变物件内容的方使是呼叫其公用方法(或其他许可的情况) 这不是我举这个例子的原意 : 我将原生变数与物件参考分开讲是基於实际上的结果 : 原生变数的副本并不能互相影响, 是独立的 : 而物件参考的副本, 就是别名。会不会互相影响视其是否为可变动物件而定。 : 若要其互相独立需执行clone方法。 复制的reference value彼此也是互相独立的 只是他们指向同样的一个object instance 所有的东西你在Java当然都讲得通,但是如果把C++的用词混进来(reference, alias...) 我觉得这样的说法只会让人更混乱,reference value亦是被call by value 复制一份过去的行为,有那麽难接受吗? 我不敢说thinking in java写得不清楚 但我认为JLS写得很清楚,它是官方文件权威性不会比作者低 我个人猜thinking in java的作者是从他过去对C/C++的经验,角度去解释java 我认为这已经接近在用词上的争论,所以我也就不再回这篇文章 最後我以前辈TAHO的文章做为结尾,我认为TAHO前辈这篇文章已经足以终结这个讨论串 -- TAHO前辈的文章 发信人: [email protected] (痴人), 看板: java 标 题: call by XXX 必也正名乎.... 发信站: 中山计中美丽之岛 (Tue Oct 30 12:38:01 2001) 转信站: nhctc_bbs!news.NHCTC!ctu-peer!news.nctu!news.cis.nctu!News.Math.NCTU!ne Origin: bbs.nsysu.edu.tw 好吧..... 既然要讨论 那就要先来正名一下 首先 得先厘清 何谓 call by value 又何谓 call by reference 当然在这之前 要先定义好 什麽是 value 什麽是 reference 因为最近在翻译 JLS 所以我引用 JLS 里面对这两个词的用法 ( 这份文件应该可以代表 sun 的官方看法吧? ) 据我的感觉 在 Java 中 有两种 Type 也就是 primitive type 跟 reference type 这两种 Type 限制了 variable 所能握有(hold) 的 value 种类 而所谓的 value 当然就是指 "值",也就是资料的直接内容 (指其位元码,而非其代表的意义) 所谓的 primitive type 我喜欢翻译为基本型别 这种型别的 value 被称之为 primitive value 这种 value 所代表的就是一个数量 一个大小 并不是用来代表其他任何东西的 所谓的 reference type 一般我们翻译成 "参考型别" 这种型别的 value 被称为 reference value 而这个 reference value 并非是实际上应用的东西 不是一个数量 它只是个参考 是一个可以 指向物件 的参考 也就是可以根据 reference value 去找到物件 但是 reference value 并不等於是物件 ( 其实 reference value 跟 reference 混用 并不会照成太大的困扰 ) 也就是说 value 可分为两种,分别为 primitive value 跟 reference value 而所谓的 variable(常常翻译成变数) 则可以握有(hold) 这两种东西 当 variable hold 的是 primitive value 时 我们称这个 variable 是 primitive type 的变数 反之 当 variable hold 的是 reference value 时 我们称这个 variable 是 reference type 的变数 ( 注意,这句话是说 它是个 "参考型别的变数",而非 "它是个参考" ) 所以 primitive value,reference value,variable, primitive type,reference type,object 分别是代表不同的意义 不同的东西 不可混用 所以下面这两个叙述 int i = 1; String str = "test"; 其中 i 跟 str 是 "变数" "test" 是个字串的生成表示式,会生成 String 物件 1 是个整数的直译字(literal) int 跟 String 是 type 我们是看不到 value 的,他们是被 hold 在变数中的 另外 i 跟 str 虽然都是变数 但是 JVM 可以知道 i 是 primitive type 的变数, str 是 reference type 的变数 至於要分辨那属於那种 type 的原因 是要知道当我们使用变数 hold 住的 value 时 (当然是一堆位元码) 这些码代表的到底是 primitive value 还是 reference value 比如说如果他的内容是 749452 那这个 749452 代表的是一个数量值,还是记忆体中的一个位置区块 请注意: 严格来说 str 是个 variable 是一个 reference type 的 variable str 不是一个 参考 而是握有参考值 str 也不是一个 物件 而是握有指向物件的参考值 平常我们在说 "str 物件" 只是为了方便起见 在讨论这些东西时 要说清楚才行 於是 如果所谓的 call by value,是把 value 复制一份给别人 那麽 call by reference 就是把 reference 复制一份给别人 在这种前提下称 "Java 在传递 reference type 引数时 是 call by reference" 是没有问题的 Java 确实是把 variable 所 hold 的 reference value 复制一份 或者可以把 call by reference 改称为 call by reference value 会更清楚 这种情况下甚至可以说 call by reference 是 call by value 的一种 而 "在传递 primitive type 的引数时,是 call by primitive (value)" call by primitive 也是 call by value 的一种 如果是这样, 那 Java 是 call by reference (value) 也是 call by value 因为 reference value 也是一种 value 这时候去争论 Java 是 call by value 还是 call by reference 有甚麽意义呢? 如果把 variable reference object 混为一谈 value 的意义又没有规范清楚 把人家说的 call by reference 当成 call by object 的意思 然後把别的语言的用法套到 Java 上 那就乱成一团 也难怪会吵翻天了....... --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.121.212.1







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灯, 水草

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

TOP