对于基本数据类型来说,实现的是值传递,方法接收参数的值,但不能改变这些参数的值。如果要改变参数的值,则用引用数据类型,因为引用数据类型传递给方法的数据在内存中的地址。
总结:
1.方法调用时传递的是基本数据类型:
形参的改变不会影响实参的值;
2.方法调用时传递的是引用数据类型:
形参的改变会影响实参的值;
代码示例:
package com.argstest;
/**
* 值传递和引用传递
* @author ZhangJingran
*
*/
public class ArgsTest {
public static void main(String[] args) {
//
int a = 100;
System.out.println("swap前: a=" + a);
swap(a);
System.out.println("swap后: a=" + a);
System.out.println("**************");
Dog dog = new Dog("大黄");
System.out.println("swap前: dog.name=" + dog.getName());
swap(dog);
System.out.println("swap后: dog.name=" + dog.getName());
System.out.println("**************");
Dog dog1 = new Dog("黑黑");
Dog dog2 = new Dog("白白");
System.out.println("swap前: dog1.name=" + dog1.getName() + "\tdog2.name=" + dog2.getName());
swap(dog1, dog2);
System.out.println("swap后: dog1.name=" + dog1.getName() + "\tdog2.name=" + dog2.getName());
}
//基本数据的方法
public static void swap(int x){
x *= 2;
System.out.println("swap后: x=" + x);
}
//引用数据类型的方法
public static void swap(Dog x){
x.setName("花花");
System.out.println("swap后: x.name=" + x.getName());
}
//交换两个对象
public static void swap(Dog x, Dog y){
Dog temp = x;
x = y;
y = temp;
System.out.println("swap后: dog1.name=" + x.getName() + "\ty.name=" + y.getName());
}
}
——————————————
结果:
swap前: a=100
swap后: x=200
swap后: a=100
**************
swap前: dog.name=大黄
swap后: x.name=花花
swap后: dog.name=花花
**************
swap前: dog1.name=黑黑 dog2.name=白白
swap后: dog1.name=白白 y.name=黑黑
swap后: dog1.name=黑黑 dog2.name=白白
网友评论