java方法参数传值传引用的一点看法
2009-06-18 15:14
316 查看
java 跟C++不同,java的方法参数都是传值,没有传引用。很多人都以为是传引用,而且这种错误的观点很普遍,今天在这里具体分析一下。方法参数有基本类 型,如int等,另外一种类型是OBJECT,对象。详细说一下方法参数是对象的,跟C++不同的是,JAVA方法参数传对象,传的是对这个对象引用的一 份拷贝,即地址值,跟原来的引用都是指向同一个对象。所以说,JAVA方法参数传的都是值。
程序一 传的对象值是改变的。
public class Test
{
public Test()
{
int [] count={5};
change(count);
System.out.println(count[0]);
}
public void change(int [] counts)
{
counts[0]=6;
System.out.println(counts[0]);
}
public static void main(String [] args)
{
Test t=new Test();
}
}
程序一中,输出结果都是6,change(count); 把对象的一份引用拷贝传给change(),这个拷贝跟原来的引用都是指向同一个对象。所以改变引用拷贝的值,对象的值也跟着改变。 程序2,传的对象值不改变
class Foo{
int i=0;
}
public class A{
public static void main(String args[]){
Foo f=new Foo();
add(f);
System.out.println(f.i);
}
public static void add(Foo f){
f=new Foo();
f.i++;
}
}
输出结果是0
程序2中,也是传一份引用的拷贝,但在 add()方法中,f=new Foo(); NEW出了一个新的对象,所以引用的拷贝指向了一个新的OBJECT。原来的值还是没有改变。 程序3 String 不改变,数组改变
public class Example{
String str=new String("good");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
Sytem.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
程序3输出的是 good and gbc.
String 比较特别,是因为java在传string的时候把string当成基本类型来处理 。所以值是不变的。
程序一 传的对象值是改变的。
public class Test
{
public Test()
{
int [] count={5};
change(count);
System.out.println(count[0]);
}
public void change(int [] counts)
{
counts[0]=6;
System.out.println(counts[0]);
}
public static void main(String [] args)
{
Test t=new Test();
}
}
程序一中,输出结果都是6,change(count); 把对象的一份引用拷贝传给change(),这个拷贝跟原来的引用都是指向同一个对象。所以改变引用拷贝的值,对象的值也跟着改变。 程序2,传的对象值不改变
class Foo{
int i=0;
}
public class A{
public static void main(String args[]){
Foo f=new Foo();
add(f);
System.out.println(f.i);
}
public static void add(Foo f){
f=new Foo();
f.i++;
}
}
输出结果是0
程序2中,也是传一份引用的拷贝,但在 add()方法中,f=new Foo(); NEW出了一个新的对象,所以引用的拷贝指向了一个新的OBJECT。原来的值还是没有改变。 程序3 String 不改变,数组改变
public class Example{
String str=new String("good");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
Sytem.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
程序3输出的是 good and gbc.
String 比较特别,是因为java在传string的时候把string当成基本类型来处理 。所以值是不变的。
相关文章推荐
- java方法参数传值传引用的一点看法
- java方法参数传值传引用的一点看法
- JAVA方法传递参数:传值?传引用?
- Java方法参数的传递机制,值传递?引用传递?
- 在Java中方法参数的传递,对象是传递引用
- Java方法参数引用
- JAVA 方法的参数是按值传递还是引用传递?
- Java 把对象作为参数传到一个方法里,这个是值传递还是引用传递, 为什么结果这么怪?
- Java中方法参数传递----传值与传引用的理解
- 探究java方法参数传递--引用传递?值传递!
- 在Java中方法参数的传递,对象是传递引用
- 【java】值传递和引用传递---对象作为方法的参数传入属于哪种传递
- 【解惑】Java方法参数是引用调用还是值调用?
- Java 方法参数的值传递和引用传递
- 【Java学习】java方法参数的值传递和引用传递
- java 方法参数-值调用,引用调用问题
- java面试题解惑:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- java基础入门-方法参数的调用是值调用而不是引用调用
- JAVA方法传递参数:传值?传引用?
- Java方法参数是引用调用还是值调用?