JAVA中关于String的一道程序题

来源:百度知道 编辑:UC知道 时间:2024/06/23 14:58:43
程序代码如下:
public class String_1 {
String s1=new String("good");
String s3=new String("good1");
char []s2={'a','b','c'};

public static void main(String[] args) {

String_1 ex=new String_1();
ex.change(ex.s1,ex.s2);
ex.s3="test3";
System.out.println(ex.s1);
System.out.println(ex.s2);
System.out.println(ex.s3);
}
public void change(String s1,char[]s2){
s1="test";
s2[0]='g';
System.out.println(s1);
}

}
结果为
test
good
gbc
test3
为什么在change方法中已经给s1付值为test,在主方法中输出s1还是good,哪位大哥教小弟一下,万分感谢!

你 在方法中传的参数是外面的S1而你在change方法里面定义的s1只是在方法里面有效,这是变量的作用域问题。
你可以把change()方法改为
public void change(String s1,char[]s2){
this.s1=s1
s1="test";
s2[0]='g';
System.out.println(s1);
这样应该就能够得到你想要的值了!

修改一下这方法:
public void change(String s1,char[]s2){
s1="test";
s2[0]='g';
System.out.println(s1);
}
应该改为
public void change(char *s1,char[]s2){
s1="test";
s2[0]='g';
System.out.println(s1);
}
你的s1不是静态变量,如果是静态变量话可以直接改变它的值,否则你应该把它的引用传进去,这样才能达到修改的目的。

它是String型,只能修改引用;在change里面修改的是引用,实际值没变,你打印的时候用ex.s1是输出这个串的实际值,自然还是good罗

String 类 函数传递的是句柄的副本
在函数体中的S1是系统新创建的String的对象,自在函数体中存活.对函数体内的S1的修改不会改变
真正S1的值.

为了便于你理解,可以看一下下面的代码
//: Stringer.java
public class Stringer {
static String upcase(String s) {
return s.toUpperCase();
}
public static void main(String[] args) {
String q = new S