java的基础问题

public class Test {

static void  func(int a, String b, String c) {
    a = 1;
    b.trim();
    c = b;
}

public static void main(String[] args) {
    int a = 0;
    String b = "Hello  World   ";
    String c = "OK";
    func(a, b, c);
    System.out.println("" + a + "," + b + "," + c);

}

}

打印结果:0,Hello World ,OK

为什么a、b、c的值都没有变化?
[b]问题补充:[/b]
可以再说的详细点么? 不是很理解

因为在java中

一些基础类型int char long这些在调用方法时是按照值传递的

而对象则是按照引用传递的

字符串虽然是对象,但是String是被特殊处理过的,传入方法时只不过是这个String对象的拷贝
真正的String对象已经创建 是不可修改的

[code="java"]
String a = "abc";//创建了一个String对象a,内容为"abc"
a = "b";//新创建了一个String对象,内容为"b",把这个对象的引用赋给了a
[/code]

因为是值传递 不是引用传递

[color=blue]

因为 Java中的向方法传递的参数,都是值传递。参见一篇文章吧:

http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html
[/color]

JAVA中的参数传递。对于基本类型,值传递,没有任何异议。对于非基本类型,则传递的是对象的引用,但并不是引用传递,因为形参只是实参的拷贝,改变形参的值不会影响实参。

因为a,b,c相当于值传递
可以这样做:
class A{
int a;
String b;
String c;
//get/set
}
然后把A传进去操作
static void func(A a){
a.setA(2);
a.setB("aaaa");
a.setC("cccc");
}
public static void main(String[] args) {
A a=new A();
func(a);
System.out.println(a.getA());
}

建议看看c基础 可能更容易理解值传递和址传递的概念