Ⅰ java参数传递是值传递还是引用传递
以下是csdn中查到的一些资料,希望有所帮助
java 传递参数的两种方式:
Java中没有指针,所以也没有引用传递了,仅仅有值传递不过可以通过对象的方式来实现引用传递 类似java没有多继承 但可以用多次implements 接口实现多继承的功能
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
a.传递值的数据类型:八种基本数据类型和String(这样理解可以,但是事实上String也是传递的地址,只是string对象和其他对象是不同的,string对象是不能被改变的,内容改变就会产生新对象。那么StringBuffer就可以了,但只是改变其内容。不能改变外部变量所指向的内存地址)。
b.传递地址值的数据类型:除String以外的所有复合数据类型,包括数组、类和接口
值传递的例子:
[java]view plain
packagecom.other.test;
publicclassTest{
publicstaticvoidchange(inti,intj){
inttemp=i;
i=j;
j=temp;
}
publicstaticvoidmain(String[]args){
inta=3;
intb=4;
change(a,b);
System.out.println("a="+a);
System.out.println("b="+b);
}
}
输出的结果是 a=3 b=4,传递的值并不会改变原值
引用传递的例子:(数组)
[java]view plain
packagecom.other.test;
publicclassTest{
publicstaticvoidchange(int[]counts){
counts[0]=6;
System.out.println(counts[0]);
}
publicstaticvoidmain(String[]args){
int[]count={1,2,3,4,5};
change(count);
System.out.println(count[0]);
}
}
输出结果是6 6 也就是引用的值改变了原来的值
引用传递的例子:(对象)
定义一个A对象:
[java]view plain
packagecom.other.test;
publicclassA{
inti=0;
}
[java]view plain
packagecom.other.test;
publicclassTest{
publicstaticvoidadd(Aa){
//a=newA();①
a.i++;
}
publicstaticvoidmain(Stringargs[]){
Aa=newA();
add(a);
System.out.println(a.i);
}
}
看看String的情况:
[java]view plain
packagecom.other.test;
publicclassTest{
Stringstr=newString("old");
char[]ch={'a','b','c'};
publicstaticvoidmain(Stringargs[]){
Testex=newTest();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+"and");
System.out.println(ex.ch);
}
publicvoidchange(Stringstr,charch[]){
str="new";
ch[0]='d';
}
}
( 对象包括对象引用即地址和对象的内容)
String 比较特别,看过String 代码的都知道, String 是 final的。所以值是不变的。 函数中String对象引用的副本指向了另外一个新String对象,而数组对象引用的副本没有改变,而是改变对象中数据的内容.
对于对象类型,也就是Object的子类,如果你在方法中修改了它的成员的值,那个修改是生效的,方法调用结束后,它的成员是新的值,但是如果你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象。
Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言)。
如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的值不会改变原始的值.
如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的值,那么在函数内的改变会影响到传入的参数。如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的地址,所以不会改变参数的值。
Ⅱ Java的参数传递是值传递还是引用传递
测试下就知道了
publicstaticvoidmain(String[]args){
inta=1;
Stringstr="abc";
changeValue(a,str);
System.out.println(a);
System.out.println(str);
}
privatestaticvoidchangeValue(inta,Stringstr){
a=2;
str="123";
}
结果:
1
abc
所以是值传递
(如果是引用的类,然后又set、get方法就另当别论了)
Ⅲ JAVA基础问题,到底是值传递还是引用传递
java中方法参数传递方式是按值传递。所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而自己本身不会受到任何影响。
如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
Ⅳ Java String引用传递问题
了解数据在堆栈内存中的存储,这道问题就可以解了。
1.String对象传入方法后,str2是局部变量,方法结束之后,局部变量值会在缓冲区中。但是并没有修改成员变量str1的值,而输出的仍然是str1的值,"hello"。(局部变量和成员变量是不同的变量,即使名字相同)
2.至于第二个因为类的实例化,对象可以指向该类地址,可以访问该类的成员变量。对象指向成员变量temp,调用方法tell方法时,传入的是Ref2对象的地址。该地址可以找到Ref2的成员变量temp。然后把"xueyuan"赋给temp,由此temp的值已经改变,方法调用结束之后,输出的是Ref2类的已经改变值的成员变量
Ⅳ java中参数传递方式
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
Ⅵ java中的引用传递是什么
值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。
Ⅶ java类方法如何实现引用传递和值传递
参数是基本类型就是传值,传对象就是引用传递。
swap(Integer x, Integer y)可以传递引用,但是没办法实现交换。这跟Integer的实现方式有关。所以不是引用传递就一定能改变外面的值。
下面是引用传递,交换的情况,又臭又长。
classUntitled{
intneedFix;
publicstaticvoidswap(Untitledx,Untitledy){
inttemp=x.needFix;
x.needFix=y.needFix;
y.needFix=temp;
}
publicstaticvoidmain(String[]args){
Untitle1=newUntitled();
Untitle2=newUntitled();
u1.needFix=3;
u2.needFix=4;
swap(u1,u2);
System.out.println(u1.needFix+","+u2.needFix);
}
}
另外,你可以考虑一下引用传递,不过也是一种传值,java里面没有事实上的指针。直接交换引用指向的对象是没有作用的。
Untitledtemp=x;
x=y;
y=temp;
无效。
Ⅷ Java的参数传递是“值传递”还是“引用传递”
java的数据类型分为基本类型和引用类型
基本类型:byte,short,int,long,char,float,double,boolean
引用类型:类,接口和数组。
基本类型的参数是值传递,引用类型的参数是引用传递
另外String、Integer、Double、Long……等immutable的类型特殊处理,可以理解为传值,最后的操作不会修改实参对象
JAVA中值传递和引用传递
Ⅸ java引用数据类型的传递
程序从main开始,创建了一个Change对象c,给c的x对象赋值为20。
接下来是调用fun()方法,将创建的Change对象c,传递到fun()方法中。
在fun()方法中,将Change对象c的x属性赋值为25。
所以,在执行System.out.println("x = "+c.x);这句的时候,输出的是25。