[問題] Java by value VS JS by reference

看板Ajax作者 (ethan0514)時間7年前 (2017/07/29 13:00), 7年前編輯推噓4(4017)
留言21則, 6人參與, 最新討論串1/1
最近學了 JS的by refenerce用法 跟JAVA 的by value 去比較 我這邊的理解是一模一樣 為什麼名稱會不一樣呢? 這裡有點不太理解 希望有高人能指點一下 JS: var c = { greeting: 'hi' }; var d; d = c; c.greeting = 'hello'; console.log(c); console.log(d); // by reference (even as parameters) function changeGreeting(obj) { obj.greeting = 'Hola'; // mutate } changeGreeting(d); console.log(c); console.log(d); JAVA: public static void main(String[] args) { StringBuffer a = new StringBuffer("A"); StringBuffer b = new StringBuffer("B"); StringBuffer c = a; operate(a,b); System.out.println(a+","+b);//AB,B System.out.println("c:" + c); } static void operate(StringBuffer x,StringBuffer y){ x.append(y); y=x; } https://pjchender.blogspot.tw/2016/03/javascriptby-referenceby-value.html 這是那堂課的相關筆記 裡面提到JS是 by reference -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.192.30.30 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1501304408.A.6F7.htmlchiang0514:轉錄至看板 java 07/29 13:02 ※ 編輯: chiang0514 (123.192.30.30), 07/29/2017 13:04:01

07/29 13:20, , 1F
是指 pass by reference? JS 沒有這種功能
07/29 13:20, 1F

07/29 14:37, , 2F
我看Udemy 克服JS奇怪步份,說物件是by reference
07/29 14:37, 2F

07/29 14:39, , 3F
可是我覺得比較像JAVA的 byy value
07/29 14:39, 3F
※ 編輯: chiang0514 (123.192.30.30), 07/29/2017 14:41:40

07/29 15:03, , 4F
因為object的變數存的是reference,所以有些書為了讓
07/29 15:03, 4F

07/29 15:04, , 5F
人了解,就會直接說是pass by reference
07/29 15:04, 5F

07/29 15:32, , 6F
這種傳送法叫做 pass by (reference) value
07/29 15:32, 6F

07/29 15:34, , 7F
說成pass by reference基本上是錯的,pass by reference的
07/29 15:34, 7F

07/29 15:37, , 8F
話對參數就等於原變數,以你的例子在函式中把obj = null
07/29 15:37, 8F

07/29 15:37, , 9F
那d也會變null,而不再指向c。js沒有這種的
07/29 15:37, 9F

07/29 15:49, , 10F
在談傳參數方法時,重點只要放在參數那個變數也就是obj
07/29 15:49, 10F

07/29 15:50, , 11F
obj指向的物件的屬性可以改應該用物件是mutable來說明
07/29 15:50, 11F

07/29 16:02, , 12F
寫C#後才發現當初所謂的pass by reference只是為了讓
07/29 16:02, 12F

07/29 16:03, , 13F
大家知道傳遞value type和reference type的差異,並不
07/29 16:03, 13F

07/29 16:04, , 14F
準確,但和周遭的人糾正都是pass by value時
07/29 16:04, 14F

07/29 16:05, , 15F
被說分太細了,和新人這樣提會弄混他們 =.=a
07/29 16:05, 15F

07/29 16:16, , 17F
見 Call by sharing 章節
07/29 16:16, 17F

07/30 09:39, , 18F
call-by-sharing 只是描述行為而已 沒有解釋任何事
07/30 09:39, 18F

07/30 09:40, , 19F
會講到call-by-value/reference都是以C/C++的角度去看
07/30 09:40, 19F

07/30 09:42, , 20F
js/java/python的reference 就是 C/C++的pointer
07/30 09:42, 20F

07/30 09:44, , 21F
mutable obj 是 T* ptr; immutable obj 是 const T *ptr
07/30 09:44, 21F
文章代碼(AID): #1PV1PORt (Ajax)
文章代碼(AID): #1PV1PORt (Ajax)