在Java 中,参数传递机制有两种:传值、传址。
基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的;属于传值。
对象作为参数传递,是把对象在内存中的地址拷贝了一份传给了参数;属于传址。
public static void main(String[] args) { int n =3; // ①
System.out.println(n); // 3
chageData(n); // ②
System.out.println(n); // 3}public static void chageData(int num){
num = 10; // ③}观察输出结果,发现 n 的值并没有改变。
立即学习“Java免费学习笔记(深入)”;
因为 n,num 都是基本类型,所以值就直接保存在变量中。
流程图如下(对应代码中的①②③):

首先来看 String 的例子:
public static void main(String[] args) {
String str = "hello"; // ①
System.out.println(str); // hello
chageData(str); //②
System.out.println(str); // hello}public static void chageData(String s){
s ="world"; // ③}观察结果,发现 str 并没有发生改变。这里结合流程图来做下分析:
在 ① 执行完后,就会在堆中生成一个对象引用 str,里面存放的是地址索引,该地址指向内存中真正的 String 对象
在 ② 生成了对象引用 s ,通过传址引用,它也得到了 “hello” 的地址索引。
在 ③ 对对象引用 s 重新赋值。按理说应该是对象的值从 “hello” -> “world”。但是它却创建了一个的新的对象,原因就在于 String 的不可变性,因为一旦 String 发生变化就创建新的对象。

再来看 StringBuffer 的例子:
public static void main(String[] args) {
StringBuffer stb = new StringBuffer("hello"); // ①
System.out.println(stb); // hello
chageData(stb); // ②
System.out.println(stb); // hello world}public static void chageData(StringBuffer s){
s.append("world"); // ③}
}观察结果,发现 stb 发生了改变,因为 StringBuffer 对象是可变的,改变它的内容不会创建出新的对象

以上就是14.Java 基础 - 参数传递的内容,更多相关内容请关注PHP中文网(www.php.cn)!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号