有关String
public class X
{
public static void main (String[]args)
{
String s1 = new String( "Hello ");
modify(s);
System.out.println(s);
}
public static void modify (String s)
{
s += "World ";
}
}
输出结果为什么为Hello?
------解决方案--------------------传参 值引用传才会被修改
------解决方案--------------------public class X
{
public static void main (String[]args)
{
String s1 = new String( "Hello ");
modify(s); //s在哪里? 这代码估计直接编译不过,
System.out.println(s);
}
public static void modify (String s)
{
s += "World ";
}
}
输出结果为什么为Hello?
------解决方案--------------------估计是想问为什么传进去的对象没有被更改,
哈哈
在java中
传String 时会拷贝一个String 进去!!所以没被更改
------解决方案--------------------这个代码是手工敲上来的吗?你这个好像完全运行不起来吧。。
modify(s);System.out.println(s);这个s变量从何而来呢。就算改为s1调用modify(s1);也毫无意义吧,对s1变量毫无影响。如果是在想输出helloworld,就让modify返回字符串,给s1重新赋值。或者
static String s1 = new String( "Hello ");
public static void main (String[]args)
{
modify(s1);
System.out.println(s1);
}
public static void modify (String s)
{
s1 = s+ "World ";
}
------解决方案--------------------或者可以改方法:
public class X
{
public static void main (String[]args)
{
String s1 = new String( "Hello ");
s1 = modify(s1);
System.out.println(s1);
}
public static String modify (String s)
{
s += "World ";
return s;
}
}
------解决方案--------------------public class X
{
public static void main (String[]args)
{
String s1 = new String( "Hello "); //1.这里s1是指向这个new String.
modify(s1); //2.这里传递s1的引用.通过这个函数的调用s = s1; s这个时候也是指向这个s1.即Hello.
System.out.println(s1); //4.所以这里输出的仍然是Hello.
}
public static void modify (String s)
{
s += "World "; //3.这里s又指向了hello world. 但是s1还是指向原来的Hello.
}
}
不知道你看懂了没有呢?或者是看点C的指针会好点,你认为呢?
------解决方案--------------------你找找字符串常量池的概念.
这就是STRING的不变性啊.SCJP的重要内容之一.
------解决方案--------------------public class X
{
public static void main (String[]args)
{
String s1 = new String( "Hello ");
s1=modify(s1);
System.out.println(s1);
}
public static String modify (String s1)
{
s1 += "World ";return s1;
}
}