JAVA语言的参数传递: 再一次感慨:java只有值传递 ,之所以有引用传递的假象是由于java中的对象,是通过引用操控的。下面是一个证明java参数是值传递而不是引用传递的一个例子:
public class Test {
public static void exchangeString( String parameterStrA , String parameterStrB )
{
//交换前输出两个形参
System.out.println( "in method exchangeString before exchange :" );
System.out.println( "output parameterStrA@" + parameterStrA );
System.out.println( "output parameterStrB@" + parameterStrB );
//使用临时变量的方法交换两个形参
String s = parameterStrA ;
parameterStrA = parameterStrB;
parameterStrB = s;
//交换后输出两个形参
System.out.println( "in method exchangeString after exchange :" );
System.out.println( "output parameterStrA@" + parameterStrA );
System.out.println( "output parameterStrB@" + parameterStrB );
}
public static void main( String[] args )
{
//初始化并输出两个实参
String argumentStrA = new String( "i'm a" );
String argumentStrB = new String( "i'm b" );
System.out.println( "out of method before exchange:" );
System.out.println( "output argumentStrA@" + argumentStrA );
System.out.println( "output argumentStrB@" + argumentStrB );
//调用交换方法
exchangeString( argumentStrA , argumentStrB );
//输出两个实参
System.out.println( "out of method after exchange:" );
System.out.println( "output argumentStrA@" + argumentStrA );
System.out.println( "output argumentStrB@" + argumentStrB );
//***********************************************************************
String s = new String("s");
s = "ss";
System.out.println( "s is "+s );
}
}
下面为程序输出结果:
out of method before exchange:
output argumentStrA@i'm a
output argumentStrB@i'm b
in method exchangeString before exchange :
output parameterStrA@i'm a
output parameterStrB@i'm b
in method exchangeString after exchange :
output parameterStrA@i'm b
output parameterStrB@i'm a
out of method after exchange:
output argumentStrA@i'm a
output argumentStrB@i'm b
为了进一步说明,再举一个例子
public class TestStringEvaluation{
public static void main(String arg[]){
String string1=new String ("string1 unchanged");
MyString string2=new MyString("string2 unchanged");
System.out.println(string1);
System.out.println(string2.string);
Change a=new Change();
a.ChangeString(string1);
a.ChangeMyString(string2);
System.out.println(string1);
System.out.println(string2.string);
}
}
class Change{
void ChangeString(String temp1){
System.out.println( "before evaluation temp1.hashCode() is " + temp1.hashCode() );
temp1="string1 changed"; //赋值后形参temp1的值发生改变,变为“=”带来的新String对象的引用值。
System.out.println( "after evaluation temp1.hashCode() is " + temp1.hashCode() );
}
//形参temp2虽为实参的一个副本,但temp2.string却并非形参,而是实实在在的
//MyString对象里的公有数据成员string,因此赋值后,temp2.string已经指向了一个新的对象
//"="返回的新String对像,所以在后续的输出时有变化。
//一定要注意 temp2 与 temp2.string的区别
//一个是形参,一个是实际对象里的String对象引用
void ChangeMyString(MyString temp2)
{ System.out.println( "before evaluation temp2.string.hashCode() is " + temp2.string.hashCode() );
temp2.string="string2 changed";
System.out.println( "after evaluation temp2.string.hashCode() is " + temp2.string.hashCode() );
}
}
class MyString
{
public String string;
MyString(String temp)
{
string=temp;
}
}
输出结果是:
string1 unchanged
string2 unchanged
before evaluation temp1.hashCode() is 1239571483
after evaluation temp1.hashCode() is -513711916
before evaluation temp2.string.hashCode() is -557379876
after evaluation temp2.string.hashCode() is 1973800917
string1 unchanged
string2 changed
分享到:
相关推荐
11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java...
13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递....
58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递...
java语言中的参数传递
参数传递是Java语言中函数调用的重要步骤,清楚地了解参数传递的过程是编写出高质量程序所必须的.大多数程序设计语言具有传值调用和传引用调用的两种方法.通过对典型程序的研究与分析可以看出JAVA语言的参数传递总是...
Jni中C和Java的参数传递.doc
62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递....
59.java基本类型的参数传递.zip59.java基本类型的参数传递.zip59.java基本类型的参数传递.zip59.java基本类型的参数传递.zip59.java基本类型的参数传递.zip59.java基本类型的参数传递.zip59.java基本类型的参数传递....
这里详细的说明了,java参数传递的过程,引用传递,值传递
java传递参数的方法 很的东西 大家下载学习一下
JAVA语言中参数传递的深入剖析
java参数的传递与返回值 江苏省无锡市
介绍java 方法的参数传递,本文是引用传递。
关于Java参数传递的PPT,详细介绍参数传递的类型。彻底理解Java只有唯一传递方式——值传递。
JAVA语言中的参数传递探究
Java的引用和函数参数传递Java的引用和函数参数传递Java的引用和函数参数传递Java的引用和函数参数传递
java参数传递 java 参数
java的参数传递对比,体现了值传递和引用传递的区别,是我在java入门是写的学习demo
Java语言中参数值传递和引用传递比较
Java参数传递的经典教学PPT,引用类型,基础类型传递的区别,String和StringBuffer类型传递的区别。