网站推广怎样做,广西最优秀的品牌网站建设公司,住房城乡建设行业从业人员,怎么做企业网站建设方案目录 理解Java引用数据类型#xff08;数组、String#xff09;传参机制的一个例子理解样例代码输出 参考资料 理解Java引用数据类型#xff08;数组、String#xff09;传参机制的一个例子
理解
引用数据类型传递的是地址。用引用类型A给引用类型B赋值#xff0c;相当于… 目录 理解Java引用数据类型数组、String传参机制的一个例子理解样例代码输出 参考资料 理解Java引用数据类型数组、String传参机制的一个例子
理解
引用数据类型传递的是地址。用引用类型A给引用类型B赋值相当于使B指向的地址为A指向的地址。此时修改B地址指向的元素等于修改A地址指向的元素A原先指向的地址中的内容不变。引用类型形参传参传递的是地址。
样例代码
代码中打印了数组的地址仔细观察地址的变化看懂后基本就明白是怎么回事了。 重点观察下面代码中的两个等号有注释的两个位置。
在递归函数中str str0;之后再把str传给下一个函数替换了形参的地址。在下一次递归时又str str0;所以1.中的str最开始所指向的地址中的内容并未发生改变。必须使用“”号把形参的地址传回来赋给str。注意此时仍然不是修改所指向的地址中的内容而是直接修改str的地址
public class Hello{public static void main(String[] args){ChangeAttr myChangeAttr new ChangeAttr();myChangeAttr.sttt();}
}class ChangeAttr{public void sttt(){int str[] {0};System.out.println(str);str strr(str, 2); //接收递归最深处的地址并赋给str// 如果没有这一步的 “” 的话str就没有变化因为递归函数没有对str地址的内容进行修改// 递归函数中直接将形参的地址换成了str0的地址并非修改str地址所指向的元素的内容System.out.println(str);System.out.println(str[0]);}public int[] strr(int[] str, int x){int str0[] {str[0] - 1};if (x!0){System.out.println(str);System.out.println(str0);str str0;System.out.println(str[0]);System.out.println(str);System.out.println(str0);str strr(str, x-1); //把递归最深处的地址传递给str最后一次递归、下探// 最终将结果传回sttt()中调用strr的地方// 如果没有这一步的 “” 的话最后传回sttt()中调用strr的地方的地址是 第一层递归的地址// 因为一直没有对str的内容进行更新// 每一次调用strr(str, x-1);都是一次递归一次成功下探}System.out.println(re str[0] x str0[0]);System.out.println(str);System.out.println(str0);return str;}// public void sttt(){// String str[] {qwe};// str strr(str, 5);// System.out.println(str[0]);// }// public String[] strr(String[] str, int x){// if (x!0){// String str0[] {str[0] x};// str str0;// System.out.println(str[0]);// strr(str, x-1);// }// System.out.println(re str[0] x);// return str;// }
}输出
D:\Java\demojava Hello
[I78e03bb5
[I78e03bb5
[I5e8c92f4
-1
[I5e8c92f4
[I5e8c92f4
[I5e8c92f4
[I61e4705b
-2
[I61e4705b
[I61e4705b
re-20-3
[I61e4705b
[I50134894
re-21-2
[I61e4705b
[I61e4705b
re-22-1
[I61e4705b
[I5e8c92f4
[I61e4705b
-2参考资料
[1] [2] [3]