Java方法(函数)传值和传引用的问题
java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清。下面YJBYS小编为大家整理了关于Java方法(函数)传值和传引用的问题文章,希望对你有所帮助。
(一)基本数据类型:传值,方法不会改变实参的值。
public class TestFun {
public static void testInt(int i){
i=5;
}
public static void main(String[] args) {
int a=0 ;
Int(a);
tln("a="+a);
}
}
程序执行结果:a=0 。
(二)对象类型参数:传引用,方法体内改变形参引用,不会改变实参的`引用,但有可能改变实参对象的属性值。
举两个例子:
(1)方法体内改变形参引用,但不会改变实参引用 ,实参值不变。
public class TestFun2 {
public static void testStr(String str){
str="hello";//型参指向字符串 “hello”
}
public static void main(String[] args) {
String s="1" ;
Str(s);
tln("s="+s); //实参s引用没变,值也不变
}
}
执行结果打印:s=1
(2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。
import Map;
import ;
public class TestFun3 {
public static void testMap(Map map){
("key2","value2");//通过引用,改变了实参的内容
}
public static void main(String[] args) {
Map map = new HashMap();
("key1", "value1");
new TestFun3()Map(map);
tln("map size:"+()); //map内容变化了
}
}
执行结果,打印:map size:2 。可见在方法testMap()内改变了实参的内容。
(3)第二个例子是拿map举例的,还有经常涉及的是 StringBuffer :
public class TestFun4 {
public static void testStringBuffer(StringBuffer sb){
nd("java");//改变了实参的内容
}
public static void main(String[] args) {
StringBuffer sb= new StringBuffer("my ");
new TestFun4()StringBuffer(sb);
tln("sb="+ring());//内容变化了
}
}
执行结果,打印:sb=my java 。
所以比较参数是String和StringBuffer 的两个例子就会理解什么是“改变实参对象内容”了。
总结:
第一:java方法基本数据类型是传值,对象类型传引用,这是千真万确的。
第二:当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。
第三:当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。
-
WebService的优缺点
Webservice是一个平台的独立,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。1.什么是WebService?对这个问题,我们至少有两种答...
-
Java方法继承、重载和覆盖总结
Java平台是基于Java语言的平台。这样的平台非常流行。因此微软公司推出了与之竞争的平台以及模仿Java的C#语言。下面文章介绍了Java方法继承、重载、覆盖总结:1、方法继承:利用extends关键字一个方法继承另一个方法,而且只能直接继承一个类。*当Sub类和Base类在同...
-
2017年SUN-Java程序员认证考试试题
JAVA程序员广义上是指一群以JAVA为谋生手段的软件开发人员。狭义的说,是指拥有SUN公司JAVA认证的程序员。下面是小编收集的SUN_Java程序员认证考试试题,希望大家认真练习!1.Java中的异常处理机制的简单和应用。当Java程序违反了Java的语义规则时,Java虚拟机就会将...
-
Java读取xml文件的方法
xml文件:Xml代码A1234XX省XX市B1234XX省XX市二七区第一种DOM实现方法:Java代码import;importmentBuilder;importmentBuilderFactory;importment;importList;publicclassMyXMLReader2DOM{publicstaticvoidmain(Stringarge[]){longlasting=entTimeMillis();try{Fil...