public class Test {
public static void main(String[] args) {
String str = new String("world");
char ch[] = {'H','e','l','l','o','w'};
change(str, ch);
System.out.println(str + "and" + new String(ch));
}
public static void change(String str,char ch[]) {
str = "Changed";
ch[0] = 'C';
}
}public static void change 这句的static为什么不能去掉?如果要改变str应该怎么做?
public static void main(String[] args) {
String str = new String("world");
char ch[] = {'H','e','l','l','o','w'};
change(str, ch);
System.out.println(str + "and" + new String(ch));
}
public static void change(String str,char ch[]) {
str = "Changed";
ch[0] = 'C';
}
}public static void change 这句的static为什么不能去掉?如果要改变str应该怎么做?
public static String change(String str,char ch[]) {
str = "Changed";
ch[0] = 'C';
return str;
}把static去掉的话就这样写:
public String change(String str,char ch[]) {
str = "Changed";
ch[0] = 'C';
return str;
}
但是主函数调用的时候要:
Test t=new Test();
t.change(str,ch);
StringBuilder sb = new StringBuilder("原来的串"); sb.clear();
sb.append("changed");
或者是用StringBuffer类,看来你是对常量和变量没有理解,翻一下API看看String的说明吧;
再有就是关于static关键字,静态说明是属于某个类的方法而不是属于某个实例变量,当你要去掉这个关键字时就要先实例化一个对象才有调用这个方法。
而你后面的str = "Changed";程序又在对象池中创建了一个Changed,str引用了Changed,如果在各个程序段中输出str的值,str还是在本程序段中对对象池中字符串的引用的值,如果想改变Str的值,那就用Stringbuffer定义:Stringbuffer str=new Stringbuffer("world");
main也是一个静态方法 静态方法内部不能直接引用外部非静态方法 要:Test test=new Test();test.changed(str);
char ch[] = {'H','e','l','l','o','w'};实际上char类型是八大基本数据类型之一:Character类型。数组引用的是一个真实对象,ch[0]="C",改变了引用的值。
这是我的理解。望其他人再补充下。
str是一个对象的引用,在方法调用的时候是以值的形式传递,调用完后str没有变化,但是它引用的对象发生了变化。