Go和Java中参数传递对比
在Go和Java中,参数的传递方式有所不同。
- Go语言中的参数传递:
在Go中,函数的参数是通过值传递的。如果参数是一个原始数据类型(如int、float、bool等),那么传递的就是这个值的副本。如果参数是一个复合类型(如struct、slice、map等),那么传递的是这个复合类型的指针。
例如:
package main
import "fmt"
func change(a int) {
a = 10
}
func main() {
a := 5
change(a)
fmt.Println(a) // 输出 5
}
在这个例子中,change
函数接收一个int
类型的参数,并在函数内部改变了这个参数的值,但这个改变并不会影响main
函数中的a
。
- Java语言中的参数传递:
在Java中,对象的传递是通过引用传递的,而基本数据类型的传递是通过值传递的。
例如:
public class Main {
static void change(int a) {
a = 10;
}
public static void main(String[] args) {
int a = 5;
change(a);
System.out.println(a); // 输出 5
}
}
在这个Java例子中,change
方法接收一个int
类型的参数,并在方法内部改变了这个参数的值,但这个改变并不会影响main
方法中的a
。
如果我们想改变main
方法中的a
,我们需要传递a
的引用,例如传递一个包含a
的对象,或者使用特殊的包装类(如AtomicInteger
)。
总结:
Go中参数传递基本上是“值”传递,除非参数是指针类型或者数组等复合类型,它们会导致引用传递。
Java中基本数据类型的参数传递是“值”传递,而对象的传递是“引用”传递。
评论已关闭