java 传形参_Java参数传递过程中 传形参和传引用问题讨论

简述:

对于java中传递的参数, 分为两类,基本数据类型作为参数,如int,double等

以及 以某个对象类作为参数进行传递,在函数中修改参数的结果是不同的

1. 基本数据类型传递的是值

2. 引用数据类型传递的是地址

但是究竟哪些是基本类型呢?  下面做了比较粗犷的测试

以下测试的代码中,作为输入情况,分为五种:

先后传递五种不同的变量作为参数,观察是传形参,还是传引用

a)  一个自己定义的对象IntNum intNum, 修改其成员变量num

b)  普通的一个int num

c)  String 变量

d)  List 变量

e)  Array 变量

结果发现:

b, c, 都被视为基本数据类型,只是传递一个值,并没有新建一个对象,所以修改之后,值都没有变

剩余的传递过去的都是地址,都发生了改变 其中Array类型也发生了改变

测试代码:

package test.generic;

import java.util.ArrayList;

class IntNum{

private int num;

public IntNum(int num){

this.num = num;

}

public void setNum(int num) {

this.num = num;

}

public int getNum() {

return num;

}

}

class ParameterChanger{

//here parameter is an IntNum class

public void ChangeToZero(IntNum intNum){

intNum.setNum(0);

}

//here parameter is basic data type int

public void ChangeToZero(int num){

num = 0;

}

public void ChangeStringToXXX(String str){

str = "XXX";

}

public void ChangeListOnIndex0(ArrayList array){

array.set(0, 0);

}

public void ChangeArrayOnIndex0(int[] array){

array[0] = 0;

}

}

public class TestReferencePassingOrNot {

public static void main(String[] args) {

ParameterChanger parameterChanger = new ParameterChanger();

IntNum intNum = new IntNum(100);

System.out.println("Pass An Object Class as parameter: ");

System.out.println("Number in IntNum Class before change: " + intNum.getNum());

parameterChanger.ChangeToZero(intNum);

System.out.println("Numberin IntNum Class after change: " + intNum.getNum());

System.out.println("\nPass An Basic Data Type int as parameter: ");

int num = 100;

System.out.println("Number int before change: " + num);

parameterChanger.ChangeToZero(num);

System.out.println("Number int after change: " + num);

System.out.println("\nPass String as parameter: ");

String str = "TEST_STRING";

System.out.println("String str before change: " + str);

parameterChanger.ChangeStringToXXX(str);

System.out.println("String str after change: " + str);

System.out.println("\nPass List as parameter: ");

ArrayList list = new ArrayList();

list.add(100);

System.out.println("list.get(0) before change: " + list.get(0));

parameterChanger.ChangeListOnIndex0(list);

System.out.println("list.get(0) after change: " + list.get(0));

System.out.println("\nPass Array as parameter: ");

int array[] = new int[1];

array[0] = 100;

System.out.println("array[0] before change: " + array[0]);

parameterChanger.ChangeArrayOnIndex0(array);

System.out.println("array[0] after change: " + array[0]);

}

}

输出:

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值