java学习笔记:java的方法参数传递
Posted 滴滴哒滴哒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java学习笔记:java的方法参数传递相关的知识,希望对你有一定的参考价值。
方法(也称函数)调用是程序设计语言一种最基本的功能。一个完整的方法声明一般包括了返回值、方法名称、方法参数三个基本要素。
方法参数的传递主要分为两种:按值调用与按引用调用。
按值调用:表示方法接收的是调用者提供的值。
按引用调用:表示方法接收的是调用者提供的变量地址。
java的传值采用了按值调用。
public class ValueTest
public static void changeCircle(Pointer center, int radius, Integer diameter, String shape)
center.setLocation(10, 10);
radius = 100;
diameter = 200;
shape = "circle";
System.out.println("In changeCircle center is:" + center +
";radius is:" + radius +
";diameter is:" + diameter +
";shape is:" + shape);
public static void main(String[] args)
Pointer pt = new Pointer();
pt.setLocation(0, 0);
int r = 5;
Integer R = 10;
String sh = "ellipse";
changeCircle(pt, r, R, sh);
System.out.println("After changeCircle center is:" + pt +
";radius is:" + r +
";diameter is:" + R +
";shape is:" + sh);
结果:
可以看到 我们的radius,diameter,shape的值并未发生变化。
以radius为例,发生了下面的变化:
可以见得基本类型int并没有因为方法体而改变。方法体中改变的是他们的拷贝,而不是他们本身。
令人比较困扰的是对象——Pointer这个类。
public class Pointer
private int x;
private int y;
public void setLocation(int x,int y)
this.x = x ;
this.y = y;
@Override
public String toString()
return "Pointer" +
"x=" + x +
", y=" + y +
'';
他的值发生了变化,由原来的(0,0)变成了(10,10)。对象传值难道不是按值吗?我们接下来去看。
如果我们删去toString的方法。输出对象,就可以看到控制台显示的是地址。
可以看到对象的值并不是我们主观意识上的x=0,y=0,而是一串地址。
public static void main(String[] args)
Pointer pt = new Pointer();
pt.setLocation(0, 0);
int r = 5;
Integer R = 10;
String sh = "ellipse";
System.out.println("Before changeCircle center is:" + pt);
changeCircle(pt, r, R, sh);
System.out.println("After changeCircle center is:" + pt +
";radius is:" + r +
";diameter is:" + R +
";shape is:" + sh);
修改下把进入方法之前的pt输出,结果
可以看到对象的值一直没有发生变化。我们在前例中,修改的并不是java自身定义的对象的值。
换一个例子,我们将更加明确
public class ValueTest
public static void main(String[] args)
Pointer p1 = new Pointer();
Pointer p2 = new Pointer();
p1.setLocation(0,0);
p2.setLocation(10,10);
System.out.println("before swap p1:" + p1 + "p2:" + p2);
swap(p1,p2);
System.out.println("After swap p1 is:" + p1 +
"p2 is:" + p2);
public static void swap(Pointer point1,Pointer point2)
Pointer temp = point1;
point1 = point2;
point2 = temp;
System.out.println("In swap center p1 is:" + point1 + "p2 is:" + point2);
那么这次的结果呢?
可见并未发生变化,删去toString继续看看。
一开始:
方法体里可以看到p1和p2的值并未发生改变
也就是说java对于对象的传值也是按值传递。
引申一下,这也就是为什么可能两个对象中的值都相等,但是用“==”得出的结果却可能是false,所以要去比较里面具体的内容是否一致就只能使用equals()了。
以上是关于java学习笔记:java的方法参数传递的主要内容,如果未能解决你的问题,请参考以下文章