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

来源:互联网 发布:圆方拆单软件破解版 编辑:程序博客网 时间:2024/06/05 18:34

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

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

1.对象


package com.object;public class Demo {public static void main(String[] args) {// TODO Auto-generated method stubNum 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 stubNum[] 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 stubPeople p1=new People();p1.add(p1);p1.display();}}interface Animal{int n=0;void display();}class People implements Animal{int num=1;@Overridepublic void display() {// TODO Auto-generated method stubSystem.out.println("n="+n+" num="+num);}void add(Animal animal){//animal.n=3;//报错((People)animal).num=3;}}

运行结果:


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



0 0
原创粉丝点击