9.请看下面的代码
public class Test{
String str=new String("Girl");
char ch[]={'d','b','c'};
public static void main(String[]args){
Test x=new Test();
x.change(x.str,x.ch);
System.out.println(x.str+"and"+ x.ch[0]+x.ch[1]+x.ch[2]);
}
public void change(String str,char ch[]){
str="Boy";
ch[0]='a';
}
}
该程序的输出结果是( )。
A.Boy and dbc B.Boy and abc
C.Girl and dbc D.Girl and abc
标签:
答案是Girlandabc 选择D
经典String str = new String("abc")内存分配问题
帮你格式化一下,你们都不知道这个编辑器可以格式化代码?
我觉得是D。str是一个引用型变量,指向“Gril”,ch也是引用型变量,指向“dbc”,调用change方法,相当于新建了两个应用型变量传递给了change方法,第一个变量重新指向了“Boy”,不影响外面的那个应用变量的指向。第二个变量指向的字符串第一个字符改变了,ch也同时指向这个字符串,所以是“abc“
D,x.change(x.str,x.ch); 中 str="Boy"; 因为String 的特殊性,每一个不同的String 值都有一个自己的地址值,相当于
str=new String("Boy"); ,你没有接受返回值,主方法中str 引用不变,还是原来的Girl,
而 传入的char ch[] 为传入一个引用,值改变,引用对应数组值也改变
public class Test{ String str=new String("Girl"); char ch[]={'d','b','c'}; public static void main(String[]args){ Test x=new Test(); x.change(x.str,x.ch); System.out.println(x.str+"and"+ x.ch[0]+x.ch[1]+x.ch[2]); } public void change(String str,char ch[]){ str="Boy"; ch[0]='a'; } } 该程序的输出结果是( )。 A.Boy and dbc B.Boy and abc C.Girl and dbc D.Girl and abc答案是D你就看他想要结果是什么,让后往上推即可!这是倒退法,希望能帮到你,因为楼上已经解释的很详细了,所以没必要啰嗦了