不积跬步,无以至千里;不积小流,无以成江海。
Java语言基础
Java的方法参数传递方式
基本数据类型:值存放在局部变量表中,无论如何修改只会修改当前栈帧的值(只对方法内的值进行改变),方法执行结束对方法外不会做任何改变。
引用数据类型:指针存放在局部变量表中,调用方法的时候,副本引用压栈,传递的是对象的引用地址。所以当你在一个地方修改这个对象(地址代表了实际唯一的值)之后,另一个引用该对象也会改变。引用类型包括 :类、接口、 数组 、字符串。
- 值传递
(参数类型是int,long等基本数据类型(八大基本数据类型),参数传递的过程采用值拷贝的方式)
public class Test { public static void main(String[] args) { int a = 5; fun(a); System.out.println(a); } private static void fun(int a) { a += 1; } }
程序输出:
5
- 引用传递
public class Test { public static void main(String[] args) { int arr[] = {1,2,3}; fun(arr); for(int i = 0; i < arr.length; i++){ System.out.print(arr[i] + " "); } } private static void fun(int a[]) { a[1] = 0; } }
程序输出:
1 0 3
注意看一下字符串类型:
public class Test { public static void main(String[] args) { String string = "111"; func(string); System.out.print(string); } private static void func(String str) { str = str + "123"; System.out.println(str); } }
程序输出:
111123 111
注意StringBuffer类型:
public class Test { public static void main(String[] args) { StringBuffer str = new StringBuffer("123"); func(str); System.out.print(str); } private static void func(StringBuffer sb) { sb.append("111"); System.out.println(sb); } }
程序输出:
123111 123111
再看一下包装类型:
public class Test { public static void main(String[] args) { Integer a = 5; fun(a); System.out.println(a); } private static void fun(Integer a) { a += 1; } }
程序输出:
5