本文共 2311 字,大约阅读时间需要 7 分钟。
package com.day10;//问题:在方法中是传值还是传地址//1.如果是基本数据类型,则是 传值//2.如果是引用数据类型,则是 传地址public class ConveyValue2 { public static void main(String[] args) { /*如果是基本数据类型,则是 传值*/ int num = 10; /**在此处调用方法 value() ,只是将上一行代码 int num = 10 赋值到的 num(值为 10) , * 作为参数传给 value 方法中,但 value 方法的返回值仅仅是限制在了 value(num) 及其之内, * 因此 main 方法中 num 的值依然还是 10; * 而 value 方法中 num 的值为20*/ value(num); System.out.print(num); //输出 10 System.out.print(value(num)); //输出 20 ConveyValue2 con = new ConveyValue2(); con.valueTh(numTh); System.out.print(numTh); //输出 15 /*如果是引用数据类型,则是 传地址*/ int[] arrNum = new int[] { 10,20,30,40,50}; /**在此处调用方法 arrValue() ,并将引用类型的值作为参数传递给 arrValue() 方法, * 由于,引用类型的值即是地址, * 从而,此时的 array[0] 即是 arrNum 指向的在堆中的数组的第一个值*/ arrValue(arrNum); for(int i:arrNum) System.out.print(i+" "); //输出 60 20 30 40 50 } /*如果需要将基本数据类型通过调用方法的形式,改变值,需要使用 this * 并且由于 this 不能用于静态方法中,以及不能调用局部变量, * 因此需要将 numTh 设置为成员变量,this 才能够调用*/ static int numTh = 15; //被上面 main() 方法中的 con.valueTh(numTh); 所调用 public static int value( int num) { num = 20; return num; } public static void arrValue(int[] array) { array[0] = 60; } public int valueTh(int num) { this.numTh = num; return numTh; }}
//1.如果是 /*基本数据类型*/ 则是 传值//2.如果是 /*引用数据类型*/ 则是 传地址public class ConveyValue { private static int nm = 5; private static int num = 8; public static void main(String[] args) { /* 如果是基本数据类型,则是 传值 */ int num = 10; int addNum1 = addNum1(num); //输出:15 int addNum2 = addNum2(num); //输出:20 System.out.println(addNum1); System.out.println(addNum2); /* 如果是引用数据类型,则是 传地址 */ /**在此处调用方法 arrNum() ,并将引用类型的地址 作为参数传递给 arrNum() 方法, * 由于,引用类型的值即是地址, * 从而,此时的 arrNum[0] 即是 arrs 指向的在堆中的数组的第一个值*/ int[] arrs = new int[3]; int[] arrNum = arrNum(arrs); for (int i : arrNum) { System.out.print(i+","); //输出:60,0,0, } } private static int addNum2(int num) { num += num; //就近原则,两个num都是传进来的实参 10,并非定义的静态成员变量 8 return num; } public static int addNum1(int num) { // this.nm += num; //报错,this 不能用于静态方法:Cannot use this in a static context nm += num; return nm; } public static int[] arrNum(int[] arrs) { arrs[0] = 60; return arrs; }}
问题:Java在方法中是传值还是传地址
在 Java 中,只有传值,没有传地址,因为引用类型的值就是地址值
转载地址:http://trhwi.baihongyu.com/