日期:2014-05-20  浏览次数:20787 次

有关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;
}
}