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 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 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 进去!!所以没被更改
如用StringBuffer啊!数组之类都可以
{
public static void main (String[]args)
{
StringBuffer s1 = new StringBuffer("Hello");
modify(s1);
System.out.println(s1.toString());
}
public static void modify (StringBuffer s)
{
s .append( "World");
}
}
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 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 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;
}
}
但对String类型却可以运用+号操作,所以String在java中要特殊一些