可口可乐最新产品:总结Java函数传值和传引用的问题
来源:百度文库 编辑:偶看新闻 时间:2024/05/04 18:48:12
发布时间: 2010-4-13 10:35 作者: 未知 来源: 51Testing软件测试网采编
字体: 小 中 大 | 上一篇 下一篇 | 打印 | 我要投稿
另外来自百度知道的内容:
程序如下:
1. package test; 2. public class Test 3. { 4. static void fun(int a) 5. { 6. a=10; 7. } 8. static void fun(String s) 9. { 10. s="ibm"; 11. } 12. static void fun(Person p) 13. { 14. p.age=10; 15. p.name="ibm"; 16. } 17. public static void main (String []args) 18. { 19. int num=5; 20. String s="db2"; 21. Person p=new Person(); 22. p.age=5; 23. p.name="db2"; 24. fun(num); 25. fun(s); 26. fun(p); 27. System.out.println(num); 28. System.out.println(s); 29. System.out.println(p.age+" "+p.name); 30. } 31. } 32. class Person 33. { 34. public int age; 35. public String name; 36. } 输出结果是:
5
db2
10 ibm
解释:
String str = "db2";
str是一个对象,传到这个方法里面为什么不能改变
static void fun(String s)
{
s="ibm";
}
原因在于java中是传值,方法中的s是你传递进来的str的副本,s和str指向同一个对象,但是这并不是代表是按地址传递的,你让s = "ibm";你要知道"ibm"也是一个String对象,你是让一个副本指向了一个新的对象,所以,由于是值传递,不是地址传递,所以str并不会改变自己的值,因为他还是指向"db2",并没有指向"ibm";地址是没有变的。
至于person,你传进来的也是一个副本,但这个副本修改的是同一个地址中person对象的参数,所以当方法执行完,person中的参数会发生变化。
如果你还认为java可以按地址传递的话,你可以把
static void fun(Person p)
{
p.age=10;
p.name="ibm";
}
这个方法稍加变化,改为
static void fun(Person p) {
p = new Person();
p.age = 111111;
p.name = "2222222";
}
你在把person的age和name打出来看看,什么变化都没有,原因就是p指向了一个新的person对象,是一个新的地址,java不是按照地址传递,所以person的值是不会变的。
字体: 小 中 大 | 上一篇 下一篇 | 打印 | 我要投稿
另外来自百度知道的内容:
程序如下:
1. package test; 2. public class Test 3. { 4. static void fun(int a) 5. { 6. a=10; 7. } 8. static void fun(String s) 9. { 10. s="ibm"; 11. } 12. static void fun(Person p) 13. { 14. p.age=10; 15. p.name="ibm"; 16. } 17. public static void main (String []args) 18. { 19. int num=5; 20. String s="db2"; 21. Person p=new Person(); 22. p.age=5; 23. p.name="db2"; 24. fun(num); 25. fun(s); 26. fun(p); 27. System.out.println(num); 28. System.out.println(s); 29. System.out.println(p.age+" "+p.name); 30. } 31. } 32. class Person 33. { 34. public int age; 35. public String name; 36. } 输出结果是:
5
db2
10 ibm
解释:
String str = "db2";
str是一个对象,传到这个方法里面为什么不能改变
static void fun(String s)
{
s="ibm";
}
原因在于java中是传值,方法中的s是你传递进来的str的副本,s和str指向同一个对象,但是这并不是代表是按地址传递的,你让s = "ibm";你要知道"ibm"也是一个String对象,你是让一个副本指向了一个新的对象,所以,由于是值传递,不是地址传递,所以str并不会改变自己的值,因为他还是指向"db2",并没有指向"ibm";地址是没有变的。
至于person,你传进来的也是一个副本,但这个副本修改的是同一个地址中person对象的参数,所以当方法执行完,person中的参数会发生变化。
如果你还认为java可以按地址传递的话,你可以把
static void fun(Person p)
{
p.age=10;
p.name="ibm";
}
这个方法稍加变化,改为
static void fun(Person p) {
p = new Person();
p.age = 111111;
p.name = "2222222";
}
你在把person的age和name打出来看看,什么变化都没有,原因就是p指向了一个新的person对象,是一个新的地址,java不是按照地址传递,所以person的值是不会变的。
java的main函数问题
java的main函数问题
java时间函数的问题
java问题:构造函数
跪求!二次函数的归纳和总结
VB引用.DLL 时出现的问题,主要是函数
在JAVA中基本数据类型和引用数据类型的区别?
java 引用
高中的函数谁有个系统的总结
Java问题,JAVA中的背景图是那个函数的那个方法,?
ASP和JAVA的问题
关于java的函数调用~~
C++ 中 函数传值和函数传址的异同?
向c++高手请教:构造函数中的&是不是引用,功能是不是和普通的函数中的引用(起的一个别名)完全相同?
关于JAVA方法引用的题目
windows.location函数传参的问题
java虚拟机概述总结
java编程的概念问题和学习方法!
一个关于java和SQL的问题?
关于Java和Java2的问题!
谁能帮我java和数据库的问题
关于JAVA和MYSQL的连接问题
C++中返回值与返回引用的函数有何区别?
java中flush()函数的作用是什么?