请问这道JAVA题到底正确答案是什么?
指出下列程序运行的结果publicclassExample{Stringstr=newString("good");char[]ch={'a','b','c'};publ...
指出下列程序运行的结果
public class Example{
String str = new String("good");
char[]ch = {'a','b','c'};
public static void main(String args[]){
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
Sytem.out.print(ex.ch);
}
public void change(String str, char ch[]){
str = "test ok";
ch[0]='g';
}
}
A.good and abc
B.good and gbc
C. test ok and abc
D.test ok and gbc
题点分析: String类的对象是不可变的, 对字符串的任何改变,都是返回一个新的String类对象。这样的话把字符串的引用传递给一个方法,该方法对字符串的任何改变,对原引用指向的对象没有任何影响。 展开
public class Example{
String str = new String("good");
char[]ch = {'a','b','c'};
public static void main(String args[]){
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
Sytem.out.print(ex.ch);
}
public void change(String str, char ch[]){
str = "test ok";
ch[0]='g';
}
}
A.good and abc
B.good and gbc
C. test ok and abc
D.test ok and gbc
题点分析: String类的对象是不可变的, 对字符串的任何改变,都是返回一个新的String类对象。这样的话把字符串的引用传递给一个方法,该方法对字符串的任何改变,对原引用指向的对象没有任何影响。 展开
3个回答
展开全部
B,没记错的话JAVA中只有值传递没有引用传递。
所以一开始对象的属性的那个str指向new String()对象,new String()指向“good”常量。
ch指向数组的第一个元素的地址即,然后数组的第一二三个元素的地址分别指向常量‘a’,‘b’,‘c’。
当你调用change方法时候,把str和那个数组传了进去。
但是change里的str与ch[]其实都是形参,跟外面的属性没什么关系,只是名字相同罢了。
于是里面的str = "test ok"; 只是把里面这个形参的指向从“good”(new String?)改成了"test ok",(因为String是不可变的)
而数组传进来的也是值但是因为是可变的,所以直接作用在了原本的数组上。
所以外面打印的结果是字符串没变,数组变了。
所以一开始对象的属性的那个str指向new String()对象,new String()指向“good”常量。
ch指向数组的第一个元素的地址即,然后数组的第一二三个元素的地址分别指向常量‘a’,‘b’,‘c’。
当你调用change方法时候,把str和那个数组传了进去。
但是change里的str与ch[]其实都是形参,跟外面的属性没什么关系,只是名字相同罢了。
于是里面的str = "test ok"; 只是把里面这个形参的指向从“good”(new String?)改成了"test ok",(因为String是不可变的)
而数组传进来的也是值但是因为是可变的,所以直接作用在了原本的数组上。
所以外面打印的结果是字符串没变,数组变了。
展开全部
1.传值和传址的区别
2.你可以执行测试下啊,既然你都能发到网上。
2.你可以执行测试下啊,既然你都能发到网上。
追问
请问为什么【ex.change(ex.str, ex.ch);】这里只改变了数组的指针而不改变字符串的指针?难道数组用的不是指针吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
B , 这题目主要是考java 的值传参和引用传参的了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询