函数传参问题(Java复习三)

昨天在写数组问题的时候,遇到一个问题,就是数组作为函数参数传入时,数组本身值也改变了(详见Java复习二)。于是请教了一下Java老师,发掘了自己以前没有意识道德问题。

只要参数是复合类型,即对象,接口,数组,那么传递的值都是地址。

1.对象


package com.object;

public class Demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Num num1=new Num(1,1);
		Num num2=new Num(2,2);
		num1.display();
		num2.display();
		num1.add(num2);
		num1.display();
		num2.display();
	}

}
class Num{
	int num;
	int value;
	public Num(int num,int value){
		this.num=num;
		this.value=value;
	}
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public int getValue() {
		return value;
	}
	public void setValue(int value) {
		this.value = value;
	}
	public void display(){
		System.out.println("\nnum="+num+" value="+value);
	}
	public void add(Num num){
		num.setValue(3);
	}
	
}

运行结果:



2.数组

详见Java复习二


3.对象数组


package com.object;

public class Demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Num[] nums={new Num(1,1),new Num(2,2)};
		new Num(0,0).add(nums);
		for(int i=0;i<nums.length;i++){
			nums[i].display();
		}
	}

}
class Num{
	int num;
	int value;
	public Num(int num,int value){
		this.num=num;
		this.value=value;
	}
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public int getValue() {
		return value;
	}
	public void setValue(int value) {
		this.value = value;
	}
	public void display(){
		System.out.println("\nnum="+num+" value="+value);
	}
	public void add(Num num){
		num.setValue(3);
	}
	public void add(Num[] num){
		for(int i=0;i<num.length;i++){
			num[i].value=3;
		}
	}
	
}

运行结果



4.接口


package com.interfaceDemo;

public class Demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		People p1=new People();
		p1.add(p1);
		p1.display();
	}

}
interface Animal{
	int n=0;
	void display();
}
class People implements Animal{
	int num=1;
	@Override
	public void display() {
		// TODO Auto-generated method stub
		System.out.println("n="+n+" num="+num);
	}
	void add(Animal animal){
		//animal.n=3;//报错
		((People)animal).num=3;
	}
	
}

运行结果:


例子可能不太好,但是可以说明问题吧,原理和对象作参数差不多。好的,这个问题先处理到这里吧。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值