作者chiang0514 (ethan0514)
看板Ajax
标题[问题] Java by value VS JS by reference
时间Sat Jul 29 13:00:05 2017
最近学了
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://webptt.com/cn.aspx?n=bbs/Ajax/M.1501304408.A.6F7.html
※ chiang0514:转录至看板 java 07/29 13:02
※ 编辑: chiang0514 (123.192.30.30), 07/29/2017 13:04:01
1F:推 eight0: 是指 pass by reference? JS 没有这种功能 07/29 13:20
2F:→ chiang0514: 我看Udemy 克服JS奇怪步份,说物件是by reference 07/29 14:37
3F:→ chiang0514: 可是我觉得比较像JAVA的 byy value 07/29 14:39
※ 编辑: chiang0514 (123.192.30.30), 07/29/2017 14:41:40
4F:推 CloudyWing: 因为object的变数存的是reference,所以有些书为了让 07/29 15:03
5F:→ CloudyWing: 人了解,就会直接说是pass by reference 07/29 15:04
6F:→ ssccg: 这种传送法叫做 pass by (reference) value 07/29 15:32
7F:→ ssccg: 说成pass by reference基本上是错的,pass by reference的 07/29 15:34
8F:→ ssccg: 话对参数就等於原变数,以你的例子在函式中把obj = null 07/29 15:37
9F:→ ssccg: 那d也会变null,而不再指向c。js没有这种的 07/29 15:37
10F:→ ssccg: 在谈传参数方法时,重点只要放在参数那个变数也就是obj 07/29 15:49
11F:→ ssccg: obj指向的物件的属性可以改应该用物件是mutable来说明 07/29 15:50
12F:推 CloudyWing: 写C#後才发现当初所谓的pass by reference只是为了让 07/29 16:02
13F:→ CloudyWing: 大家知道传递value type和reference type的差异,并不 07/29 16:03
14F:→ CloudyWing: 准确,但和周遭的人纠正都是pass by value时 07/29 16:04
15F:→ CloudyWing: 被说分太细了,和新人这样提会弄混他们 =.=a 07/29 16:05
17F:→ s25g5d4: 见 Call by sharing 章节 07/29 16:16
18F:→ bibo9901: call-by-sharing 只是描述行为而已 没有解释任何事 07/30 09:39
19F:→ bibo9901: 会讲到call-by-value/reference都是以C/C++的角度去看 07/30 09:40
20F:→ bibo9901: js/java/python的reference 就是 C/C++的pointer 07/30 09:42
21F:→ bibo9901: mutable obj 是 T* ptr; immutable obj 是 const T *ptr 07/30 09:44