Class Demo{
public void test()
{
String str = "first";
change(str);
System.out.println(str);}
public void change(String str)
{
str = "second";
}}在同一个类中,为什么test中调用change方法改变str的值后,然后打印出来str的值一直没有被改变啊?如何能调用change方法后让打印出的str在change方法中被改变的值?
注:不要用change方法中return的方法来返回改变后的str。
public void test()
{
String str = "first";
change(str);
System.out.println(str);}
public void change(String str)
{
str = "second";
}}在同一个类中,为什么test中调用change方法改变str的值后,然后打印出来str的值一直没有被改变啊?如何能调用change方法后让打印出的str在change方法中被改变的值?
注:不要用change方法中return的方法来返回改变后的str。
java有两种传值方式:
1。基本类型传递,传递的是这个值的副本,也就是说拷贝一个,两个参数是独立的!
2。引用类型传递,传递的是引用的副本,两个引用值的是同一个内存块,假如你更改这个内存块的值,两个引用的值变!//首先要满足你这需求的话,用一下形式:
package zhao;public class Parent{
String str = null;
public static void main(String[] args)
{
Parent p = new Parent();
p.str = "first";
change(p);
System.out.println(p.str); }
public static void change(Parent p1)
{
p1.str = "second";
}
}
其次:你的代码!
Class Demo{
public void test()
{
String str = "first"; //创建一个str对象
change(str);
System.out.println(str); }
public void change(String str) //拷贝,并且又分配一个str,内容跟上面的一样,因为String是不变的,每次都生成一个新的,不是单单的拷贝引用!这里很象基本类型的传递方法!
{
str = "second";
} }
改成:
Class Demo{
String str = "first";//把str挪到这
public void test()
{
change(str);
System.out.println(str);}
public void change(String str)
{
this.str = "second";
this.str = str;//加上这句,结果就对了
}}