java传参怎么定义_Java中的参数传递

当然要看你怎么定义by value 和 by reference。Java的官方文档【3】 中如此描述:“When the method or constructor is invoked, the values of the actual argument expressions initialize newly created parameter variables.”但是作为面向对象的语言,一个对象的值又是什么呢?所以这里value并不等同于面向过程中的定义。在C语言里,或者是一个值,或者就是一个地址(引用)。但是Java里面,对象的值,就是对象的地址的值(具体见后面的例子)。

基本总结:

基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的。

对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数。

String类是个特殊的类,对它的一些操作符是重载的,所以String对象和基本类型一样,一般情况下作为参数传递。

例子:

public class parameterPass {

public static void Test1(){

int i = 10;

System.out.println("Before change, i = " + i);

changeInt(i);

System.out.println("After change, i = " + i);

}

public static void changeInt(int i){

i = 20;

}

public static void Test2() {

Person p1 = new Person();

p1.setAge(10);

System.out.println("Before change, p1 age = " + p1.getAge());

changeAge(p1);

System.out.println("After change, p1 age = " + p1.getAge());

}

public static void changeAge(Person person) {

person.setAge(20);

}

public static void Test3(){

String str = "Hello";

System.out.println("Before change, str = " + str);

changeString(str);

System.out.println("After change, str = " + str);

}

public static void changeString(String str){

str = str + " World!";

}

public static void Test4(){

Integer i = new Integer(10);

System.out.println("Before change, i = " + i);

changeInteger(i);

System.out.println("After change, i = " + i);

}

public static void changeInteger(Integer i){

i = 20;

}

public static void main(String[] args) {

System.out.println("Test pass primitive data type: int");

Test1();

System.out.println("/nTest pass user defined object: Person");

Test2();

System.out.println("/nTest pass object type: String");

Test3();

System.out.println("/nTest pass object type: Integer");

Test4();

}

}

class Person {

int age;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

参考:

【1】http://java.ccidnet.com/art/3737/20050527/472879_1.html

【2】http://javadude.com/articles/passbyvalue.htm

【3】http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值