JAVA的函数传递问题 wait online。。。
来源:百度知道 编辑:UC知道 时间:2024/06/28 20:00:15
package test;
public class Test
{
static void fun(int a)
{
a=10;
}
static void fun(String s)
{
s="ibm";
}
static void fun(Person p)
{
p.age=10;
p.name="ibm";
}
public static void main (String []args)
{
int num=5;
String s="db2";
Person p=new Person();
p.age=5;
p.name="db2";
fun(num);
fun(s);
fun(p);
System.out.println(num);
System.out.println(s);
System.out.println(p.age+" "+p.name);
}
}
class Person
{
public int age;
public String name;
}
输出结果是:
5
db2
10 ibm
----------------------------------------------------------------------------------
问题:请问什么时候传参数是按值传递?什么时候是按引用or地址传递?为什么?
谢谢,我刚学java,很多不明白的地方,希望大家多多指教。
问:yangzhen86
上面的回答是错的,记住,在java中,方法是按值传递的,根本就不是按地址传递!
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的函数传递问题 wait online。。。
java中不同类函数间的参数传递问题?
帮忙看一下函数的传递问题?
java参数传递的简单问题
关于一个java参数传递的问题
java中对象的传递问题
函数的参数传递
JAVA的参数传递
java的main函数问题
java时间函数的问题