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

时间:2022-10-01 18:49:55

昨天在写数组问题的时候,遇到一个问题,就是数组作为函数参数传入时,数组本身值也改变了(详见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);
}

}

运行结果:

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


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;
}
}

}

运行结果

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


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;
}

}

运行结果:

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

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