Java的参数传递总结

Java的参数传递总结

JAVA的参数传递总是传"值",但是传值方式也分为两种方式,它们是靠传递参数的类型区分的。这两种类型分别为JAVA的基础类型和Object(对象)类型;基础类型包括boolean,byte,short,char,int,long,float,double,而Object就是对象,如数组.在参数为基础类型时,见代码:
public class A{
public static void main(String arg[]){
int a=3;
method1(a);
System.out.println(a);
}
public static void method1(int a){
a=4;
}
}
此时结果的输出将是3,而且只要你的值在Main函数中没变,a的值不管怎么传都不回变,这是因为a是传值,而这个"值"是a的一个拷贝,a的值在传递后的改变只是改变了a的拷贝的内容,并没有改变真正的a的值;对于参数为对象
public class A{ public class A{
public static void main(String arg[]){ public static void main(String arg[]){
int[] a=new int[1]; int[] a=new int[1];
a[0]=3; a[0]=3;
method1(a); method1(a);
System.out.println(a[0]); System.out.println(a[0]);
} }
public static void method1(int[] a){ public static void method1(int[] a){
a[0]--; a=new int[0];
} a[0]=4;
} }
}
左边的结果将是2,右边的结果将是3(未变),原因是:在传递的参数为对象时,这个传递的"值"中放的内容实际上是对向所在的地址,左边的情况是指针定位到对象的地址后,在上面把内容给改了,所以数组的值后会改变,而右边的情况为给对象新分配了一个指针到新的地址上面去,所以所有的操作都在新的地址上面,并不会影响原来的值。注:对于String,Interger,Boolean,Double等的系统对象,它们虽然是Object,但是任何方式的传递参数的值得改变并不会影响原来的值。

转自 http://www.newsmth.net/pc/pccon.php?id=2206&nid=215001

=============================
一道面试题
	public static void main(String arg[]) {
String str = "hello";
method2(str);
System.out.println(str);
}

public static void method2(String str) {
str += "world";
}

结果是hello

结论(可能不对啊) 参数传递的是值传递,string比较特殊。基本类型是不会改变值的,对象是会改变的属性值的,但string也是传递的对象啊,还得研究下,写个例子

package co.xx;

public class Hello {
public static void main(String arg[]) {
int a = 3;
String str = "hello";
int[]aa = {1};
Test test = new Test();
method1(a);
method2(str);
method3(aa);
method4(test);
System.out.println(a);
System.out.println(str);
System.out.println(aa[0]);
System.out.println(test.i);
// 结果
// 3
// hello
// 0
// 99
}

public static void method1(int a) {
a = 4;
}

public static void method2(String str) {
str += "world";
}

public static void method3(int[] aa) {
aa[0]--;
}

public static void method4(Test test) {
test.i--;
}

}

class Test{

int i = 100;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值