package J2SE; public class Tux extends Thread { 
static String sName = "vandeleur"; 
public static void main(String[] args){ 
Tux t = new Tux(); 
t.piggy(sName); 
System.out.println(sName); 

public void piggy(String sName){ 
sName = sName + "wiggy"; 
start(); 

public void run(){ 
for(int i = 0; i < 4; i++){ 
sName = sName + " " + i; 



运行输出是vandeleur 
public class Foo { 
public static void main(String[] args){ 
StringBuffer a = new StringBuffer("A"); 
StringBuffer b = new StringBuffer("B"); 
operate(a, b); 
System.out.println(a + "," + b); 
String s = new String("Hello"); 
modify(s); 
System.out.println(s); int[] c = new int[1]; 
modify(c); 
System.out.println(c[0]); String foo = "base"; 
foo.substring(0,3); 
foo.concat("ket"); 
foo += "ball"; 
System.out.println(foo);                   String str = "hello"; 
str.concat("world"); 
System.out.println(str.concat("world")); } 
public static void operate(StringBuffer x, StringBuffer y){ 
y.append(x); 
y = x; 

public static void modify(String s){ 
s += "world!"; 
} public static void modify(int[] a){ 
a[0] ++; 

} 程序运行输出是 
A,BA 
Hello 

baseball 
helloworld 哪位仁兄跟我讲讲为什么吗?

解决方案 »

  1.   

    Tux里面是因为java的值传递,lz可以看一下下面的链接http://www.blogjava.net/jiafang83/archive/2007/10/23/155412.html里的传递基本数据类型参数的例子
    public void piggy(String sName)里的sName只是一个变量,与static sName无关,你可以把它改名而不会影响程序,所以更改sName不会改变static sName
    start()是在piggy里调的,会执行run()方法,run里面sName是piggy里的sName,不会改变static sName。
      

  2.   


    //StringBuffer 引用传递---对象作为参数,传的是地址,
    //operate接了地址以后,把这个地址上的内容给改了,
    //外面再读这个地址上的值,就发现值改了
    StringBuffer a = new StringBuffer("A");  
    StringBuffer b = new StringBuffer("B");  
    operate(a, b);  
    System.out.println(a + "," + b); //值传递
    String s = new String("Hello");  
    modify(s);  
    System.out.println(s);  
    public static void modify(String s){  
    s += "world!";  
    }  //同上,值传递
    int[] c = new int[1];  
    modify(c);  
    System.out.println(c[0]); 
    public static void modify(int[] a){  
    a[0] ++; 
    } String foo = "base";  
    foo.substring(0,3);  //foo=foo.substring(0,3) 才会改值;foo.substring(0,3); 只会把改号的值放到临时变量里 
    foo.concat("ket"); //同上 
    foo += "ball";  //等同与foo = foo + "ball";所以值变了
    System.out.println(foo);  String str = "hello";  
    str.concat("world");  
    System.out.println(str.concat("world"));  //str没改,str.concat("world")放到临时变量,然后输出临时变量