今天做题遇到个问题。就是关于传值的问题。
看代码:
1、
public class File_55_80 {
static void temp(StringBuffer t)
{
t.append(" Programe");
}
public static void main(String[] args) {
StringBuffer s=new StringBuffer("java");
temp(s);
System.out.println(s); }}
结果是:java programe.
书上说,可以改变引用变量的值,一切均是复制,这里stringbuffer t 是s的地址,按道理说是可以修改的,但是下面的代码我又看不懂了。
2、
public class File_55_80 {
static void temp(String t)
{
t.replace('j','l');
}
public static void main(String[] args) {
String s=new String("java");
temp(s);
System.out.println(s); }}
为什么没有输出lava,而是java呢?
看代码:
1、
public class File_55_80 {
static void temp(StringBuffer t)
{
t.append(" Programe");
}
public static void main(String[] args) {
StringBuffer s=new StringBuffer("java");
temp(s);
System.out.println(s); }}
结果是:java programe.
书上说,可以改变引用变量的值,一切均是复制,这里stringbuffer t 是s的地址,按道理说是可以修改的,但是下面的代码我又看不懂了。
2、
public class File_55_80 {
static void temp(String t)
{
t.replace('j','l');
}
public static void main(String[] args) {
String s=new String("java");
temp(s);
System.out.println(s); }}
为什么没有输出lava,而是java呢?
调用 temp方法中的t.replace( 'j ', 'l '); 是相当于产生了一个新的字符串,叫做lava ,而没有任何引用指向它,此
所以当然不输出lava了
StringBuffer类下append方法:
public StringBuffer append(String str)
Appends the specified string to this character sequence.(把指定的字符串追加到这个字符队列里)String类的replace方法:
public String replace(char oldChar,char newChar)
Returns a new string resulting from replacing all occurrences of oldChar in this string with newChar. (返回一个新的字符串结果 ....略...)显然,这2个方法执行后结果存放的位置不一样,append方法没产生新的对象,只是修改了原字符串的值;replace方法,新生成了个string 对象,并把方法的结果保存其中,而原字符串的值变了吗?没有!StringBuffer str=new StringBuffer("one ");
String str2=str.append("two ").toString();
System.out.println("str = "+str);
System.out.println("str2= "+str2);
String s=new String("one ");
String s2=s.replace('e', 'X');
System.out.println("s = "+s);
System.out.println("s2= "+s2);