关于JAVA中参数传递问题的总结(按值传递和引用传递)
来源:互联网 发布:51单片机电子设计报告 编辑:程序博客网 时间:2024/05/16 18:58
关于JAVA中参数传递问题有两种,一种是按值传递(如果是基本类型),另一种是按引用传递(如果是對象).
首先以两个例子开始:
1)
public class Test2 {
public static void main (String [] args) {
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
operate (a,b);
System.out.println(a+","+b);
}
static void operate(StringBuffer x, StringBuffer y){
}
输出:AB,B
2)
public class Test2 {
public static void add3 (Integer i){
}
public static void main (String args [ ] ) {
Integer i = new Integer (0);
add3 (i);
System.out.println (i.intValue ( ));
}
}
输出:0
首先我们应该明白JAVA中的参数传递全是以值传递的。是基本类型,就拷贝一个基本类型传进方法;是引用,就拷贝一个引用变量传进去方法,理解了这两点就能理解方法操作对象的相关问题了。最好能画出引用指向对象的图出来,就能完全理解了。
第1题,调用operate方法时,传入了两个引用a,b的拷贝x,y,这两个x,y都指向原a,b引用所指向的对象。x.append(y)对它指向的对象(即a指向的对象)进行了操作。而x=y,只是两个拷贝变量在赋值,并没有影响到原b所指向的对象。所以b所指向的对象仍然为B。
第2题,i=new Integer(val)只是一个引用的拷贝指向了另外一个对象,而原来的i仍然是指向对象new Integer(0)的。
把握住了JAVA都是传值并且传的都是拷贝的话,类似的题大家都能迎刃而解了。
Java中的参数传递只有一种方式: by value. 理论说教太麻烦了,直接看些例子吧:
1). 基本类型
}
2). 引用类型
}
理解这里的关键是区分对象和引用。这里声明的x是一个引用,而不是一个对象(只是Java把它设计为看上去好像是对象一样)。这个引用它指向了一个对象,这个对象就是后面用new关键字生成的对象。因此,可以说x指向了一个Integer对象。
在调用test方法的时候,程序将x作为参数传递给test方法了。这里仍然是值传递,在test调用过程中,会产生一份新的引用(不妨叫做y)。此时,x和y指向了同一个对象。
对象。y修改了它指向的对象的属性,很显然不会影响到x指向的对象。
有人说了数组。数组也是一个引用类型,它的参数传递方式按照引用类型的参数传递一样可以解释得通:
import java.util.Arrays;
public class A{
}
对象是传引用,简单类型是传值,不要被网上的一些概念所迷惑!!!你可以自己做个试验。
至于String等类型传的还是引用。如果你用concat方法,String对象的原值就会被改变。
但你如果按如下方法:
public class Test {
}
运行结果:Hello
这里str = "World" 就等同于 String str=new String("World")。所以结果没有改变!!!
import java.util.arraylist;
import java.util.list;
public class testclass {
public static void main(string args[]) {
list list = new arraylist();
test2(list);
system.out.println(list.size()); // 1处
test3(list);
system.out.println(list.size()); // 2处
}
public static void test2(list list) {
list = null;
}
public static void test3(list list) {
list.add(“aaaa“);
}
}
plumechen:
不会出错的。结果是0,1。
因为test2(list)传得是list的引用,我理解成指针置的副本,list=null;只是把那个传入的值设置为null,不改变原来list的指针和内容。test3(list)传入的一样,但是执行了list.add()由于传入指针值的副本也指向原来的那个list的地址,所以原来的那个list的内容就改变了,size变成了1了
- 关于JAVA中参数传递问题的总结(按值传递和引用传递)
- JAVA中参数传递问题的总结(按值传递和引用传递)
- JAVA中参数传递(按值传递和引用传递)
- Java:理解Java中函数参数传递的【按值传递】和【按引用传递】
- 关于Java的值传递和引用传递的总结
- 关于Java值传递和引用传递的总结
- Java的参数传递有值传递和引用传递
- JAVA中函数调用参数传递的理解(值传递和引用传递的理解)
- java程序中参数值传递与引用传递问题
- 详解java中给方法传递参数的两种方式:按值传递,引用传递
- Java的方法的参数传递,值传递和引用传递还有String字符串传递
- java关于值传递和引用传递
- java值传递和引用传递总结
- Java中参数传递是值传递,还是引用传递
- js 中参数传递(值传递和引用传递)
- Java中的值传递和引用传递(参数传递)
- Java参数传递:值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- 提高MYSQL大数据量查询的速度
- C++ 值传递、指针传递、引用传递详解
- JavaScript中Object对象介绍
- SilverLight中页面间传值的一种简单方式
- ARC与非ARC混合编程
- 关于JAVA中参数传递问题的总结(按值传递和引用传递)
- 端口号说明
- ABAP 将EXECL数据导入SAP 新发现
- Android 图形绘制(skia)
- linux shell 中iconv的用法
- 解决ActionBar + Menu 不能显示在手机顶部
- groovy用户指南
- jquery 控制 上移 下移
- 堆和栈的区别