java方法参数
Posted 程序员大宝(coder-dabao)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java方法参数相关的知识,希望对你有一定的参考价值。
文章目录
1 Java 程序设计语言总是采用按值调用。
按值传递:表示方法接收的是调用者提供的值。
按引用调动:表示方法接收是调用者提供的变量地址。
Java 程序设计语言总是采用按值调用。 也就是说, 方法得到的是所有参数值的一个拷 贝, 特别是, 方法不能修改传递给它的任何参数变量的内容。
java方法参数有两种类型。
1:基础数据类型:int,boolean,double,byte,long,char,float,short。
2:引用数据类型:String,类,接口,数组。
2 基础数据类型参数传递
public class Person
public static void main(String[] args)
int i = 3;
System.out.println(i);
doubleData(i);
System.out.println(i);
public static void doubleData(int x)
x = 2 * x;
输出
3
3
i属于main的栈帧中,x属于doubleData栈帧中。
参数过程:
1,x 被初始化为i值得一个拷贝(也就是3)
2,x 被乘以 2 后等于6。但是i任然是3。
3,doubleData方法结束后,x不再使用。
其它7种基础数据类型和int一样,都是拷贝了值,按照值传递。
2. 引用数据类型作为参数
2.1 数组
public class Person
public static void main(String[] args)
int[] a = new int[2];
a[0] = 5;
a[1] = 7;
System.out.println(a[0] + "," + a[1]);
change(a);
System.out.println(a[0] + "," + a[1]);
public static void change(int[] b)
int tmp = b[0];
b[0] = b[1];
b[1] = tmp;
输出
5,7
7,5
过程:
1、a指向的引用地址是:0X00000S11。
2、函数调用传递的时候,b会拷贝a的引用地址,指向0X00000S11。
3、change函数调用完毕后,b地址释放。但是a指向的地址还存在。
2.2 对象
2.2.1 对象引用传递
public class Person
private int id;
Person(int id)
this.id = id;
public void setId(int id)
this.id = id;
public int getId()
return this.id;
public static void change(Person person)
person.setId(7);
public static void main(String[] args)
Person cleverCode = new Person(5);
System.out.println(cleverCode.getId());
change(cleverCode);
System.out.println(cleverCode.getId());
输出
5
7
过程:
1、cleverCode指向了堆区new Person()引用,引用地址为的0X00000S13。
2、change方法,参数传递的时候,person拷贝了cleverCode指向的堆引用地址。
3、当调用change方法的时候,里面setId(7)。实际上是调用了new Person().setId(7)。
2.2.2 重新赋值
public class Person
private int id;
Person(int id)
this.id = id;
public void setId(int id)
this.id = id;
public int getId()
return this.id;
public static void change(Person person)
Person tom = new Person(9);
person = tom;
person.setId(7);
public static void main(String[] args)
Person cleverCode = new Person(5);
System.out.println(cleverCode.getId());
change(cleverCode);
System.out.println(cleverCode.getId());
5
5
刚开始person确实拷贝了cleverCode的引用地址。指向了0X00000S13。
但是person = tom进行了重新赋值。person的引用和tom的地址一样了,变成了:0X00000S19。
调用:person.setId(7);实际上是改变的0X00000S19地址的New Person()对象的值。
接口和对象一样。
2.3 String
String 也是一个对象。
public class Person
public static void change(String b)
//b = new String("wan");
b = "wan";
public static void main(String[] args)
String a = "zao";
System.out.println(a);
System.out.println(a);
输出
zao
zao
没有变化的原因是b的指向的地址发生了变化。
参考资料
《你真的理解Java的按引用传递吗?》:https://blog.csdn.net/cauchyweierstrass/article/details/49047217
《Java 基础之方法中的参数》:https://blog.csdn.net/qq_38182125/article/details/88094475
《JAVA中的栈和堆》:https://www.cnblogs.com/ibelieve618/p/6380328.html
技术交流
欢迎关注我的微信公众号:程序员大宝。一个乐于分享的程序员!
以上是关于java方法参数的主要内容,如果未能解决你的问题,请参考以下文章