值传递和引用传递

其实在学习java的时候,也有讨论过java是值传递还是引用传递的。java在传递原生数据类型的时候其实是值传递,在传递其他对象的时候是引用传递,例如:

public class Demo {
    public static void main(String[] args) {
        int count = 10;
        System.out.println(count);
        add(count);
        System.out.println(count);
    }
    public static void add(int count) {
        count = count + 1;
    }
}
--------------------
  10
  10
1
2
3
4
5
6
7
8
9
10
11
12
13
14

上面的例子就是值传递,add 方法是不会修改count的值的。

public class Demo {
    public static void main(String[] args) {
        Obj obj = new Obj();
        obj.name = "name";
        System.out.println(obj.name);
        modify(obj);
        System.out.println(obj.name);
    }
    public static void modify(Obj obj) {
        obj.name = "modify";
    }
}
class Obj {
    public String name;
}
--------------------
name
modify
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

上面的例子就是引用传递,modify方法是会修改obj对象

package main
import "fmt"

func main() {
	var a = 10
	var aPoint = &a
	fmt.Println(*aPoint)
	Modify(aPoint)
	fmt.Println(*aPoint)
	Modify2(a)
	fmt.Println(*aPoint)
}
type Demo struct {
	Name string
}
func Modify(a *int) {
	*a = 1
}
func Modify2(a int) {
	a = 2
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

输出:

10
1
1
1
2
3