static void change(String str)
{
str="abcde";
}public static void main(String[] args)
{
str="1234";
change(str);
System.out.println(str);
}
结果为什么是1234,而不是abcde;
{
str="abcde";
}public static void main(String[] args)
{
str="1234";
change(str);
System.out.println(str);
}
结果为什么是1234,而不是abcde;
这个结果和是否是静态方法没关系这是因为参数传递采用的是(基本类型)值传递,不是(对象类型)引用传递
static String str;
static void change()
{
str="abcde";
} public static void main(String[] args)
{
str="1234";
change();
System.out.println(str);
}
重新声明了一个变量
change(String str)
而应该是个变量作用域的问题。main方法中的str是个局部变量
也就是说只是在main方法中有效。
同样,change方法中的str也是个局部变量,所以也只是在change方法中有效。虽然change方法内部改变了str的值,但这个改变只在change方法中有效
你又没有把改变后的str返回,
所以,对于main方法中的str是没有任何影响的
你可以把change方法改成下面这样 static void change(String str){
System.out.println("before,str is:"+str);
str = "change";
System.out.println("after,str is:"+str);
}就可以发现在change方法内是发生改变了的。或者,把这个方法改成返回一个String类型的变量,再赋值给main方法的str,也是发生改变的
java里对象作为参数时,将对象的引用(str)重新赋值(指向另一个对象),并不能改变原来变量(str)的值
这里的结果和静态方法没有关系,因为String是值传递,无法改变原来的String,所以结果是1234
static void change(String str)
{
str="abcde";
}public static void main(String[] args)
{
str="1234";
change(str);
System.out.println(str);
} 改成static void change(String notStr)
{
notStr="abcde";
}public static void main(String[] args)
{
str="1234";
System.out.println(str);
}
大概你会好理解一点.
在Java中只有值传递。