JAVA中函数值是什么_[java学习笔记]java语言基础概述之函数的定义和使用&函数传值问题...

(一)基本数据类型:传值,不会改变实参的值

public classDemo{public static voidmain(String[] args) {int a = 3,b = 4;

fun(a,b);

System.out.println(a+","+b);

}//试图交换a和b的值

public static void fun(int a, intb){int temp =a;

a=b;

b=temp;

}

}

运行结果为3,4

分析:当程序执行到main函数时,在栈内存中就会多出一个main方法区,里面有a=3和b=4两个变量,接着执行fun(a,b),又会在栈内存中创建一个fun的方法区,里面有a和b变量。接着把main方法的a和b变量赋值给了fun方法区的a和b变量,即fun方法区的a=3,b=4,然后在fun方法区中交换了fun方法区的a和b的值,即fun方法区的a=4,b=3,fun方法执行完毕了,fun方法区被释放。改变不了main方法区的a和b变量。

(二)对象类型参数:传引用,函数体内改变形参引用,不会改变实参的引用,但是能改变实参的内容。

public classFunDemo{public static voidmain(String[] args) {

Person p1= new Person(10);

Person p2= new Person(20);

System.out.println("before,p1.age:"+p1.age);

System.out.println("before,p2.age:"+p2.age);

ss(p1,p2);

System.out.println("after,p1.age:"+p1.age);

System.out.println("after,p1.age:"+p2.age);

}

//试图交换p1和p2的引用,和改变其中一个的age属性值public static voidss(Person p1, Person p2){

Person p=p1;

p1=p2;

p2=p;

p1.age= 30;

}

}

运行结果:

before,p1.age:10

before,p2.age:20

after,p1.age:10

after,p2.age:30

分析:当运行到Person p1 = new Person(10);时,会在栈内存中开辟一个新空间来储存变量p1,在堆内存中创建一个Person(10)的实例,p2同理。当调用ss方法时,又会在栈内存中开辟新空间来存储形式变量p1和p2,它们分别指向堆内存中对应实际参数所指向的Person实例,在ss方法内部,交换的是形参的p1和p2的值,即交换了它们的指向。这时候,实参的指向并没有改变。然后,改变形参p1所指向的实例的内容,即改变了实参p2所指向的实例的内容。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值