java 小程序5、6行 答案 求详解(内存中的存储过程,直接在后面注释就行)
publicclassTest{publicstaticvoidmain(Stringargs[]){Stringstr=newString("World");charc...
public class Test { public static void main(String args[]) {
String str = new String("World");
char ch[] = { 'H', 'e', 'l', 'l', 'o' };
change(str, ch);
System.out.println(str + "and"); System.out.println(ch);
}
public static void change(String str, char ch[]) {
str = "Changed";
ch[0] = 'C';
}
} 展开
String str = new String("World");
char ch[] = { 'H', 'e', 'l', 'l', 'o' };
change(str, ch);
System.out.println(str + "and"); System.out.println(ch);
}
public static void change(String str, char ch[]) {
str = "Changed";
ch[0] = 'C';
}
} 展开
3个回答
展开全部
我给你解答一下,你想问的是不是为什么结果不是Changed而是World?首先,关于ch的输出,最终结果肯定是Cello,这个我想你应该是没有问题的,这个是基本的数组传递用法,这儿就不做解释了。其次,解释一下为什么是World而不是Changed。其实这儿我非常建议你去看一看马士兵老师的JAVA视频,他在视频中关于对象引用讲得非常细,或者读一读《疯狂JAVA讲义》一书的相关章节,也说明得很细的。String str = new String("World"); 这儿str是个对象引用,它指向World,就是说,str这个变量中存储的是一个地址,是谁的地址呢?就是World字符串的地址,这儿str相当于C语言中的指针。change(str, ch); 这儿是对原来的str进行一个复制传递,即将str的替身传给了change函数,这个替身它有自己的地址(但这个地址和str本身的地址是不相同的),它存储的也是一个地址,也是World字符串的地址。接下来,对change函数所做的操作,即让str的替身指向了另一个字符串,即str的替身存储的内容为“Changed"字符串的地址,这个显然和str本身是没有关系的,所以,最终还是World
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public class Test { public static void main(String args[]) {
String str = new String("World");
char ch[] = { 'H', 'e', 'l', 'l', 'o' };
change(str, ch);
System.out.println(str + "and"); System.out.println(ch);
}
public static void change(String strParam, char ch[]) { //str是传值,ch是传引用
strParam = "Changed";
//这里为了描述方便,把形参str改名成strParam,效果是一样的。注意,String传参的时候是传值,这个和int、char基本类型的传参形式是一样的。形参strParam和实参str是两个不同的引用,一开始它们都是指向"World"这块内存,后来,形参str="Change"以后,形参str被指向了另外一块内存"Change",而实参还是指向了“World”。所以实参str的值是没改变的
ch[0] = 'C';
//这里传参的时候,因为数组是传引用的,所有这里是把实参ch的内存地址传过来了,形参ch和实参ch都是指向了数组{ 'H', 'e', 'l', 'l', 'o' }的开头,指向的是同一个内存块,所以,其中一个改变值也就是改了同个内存块的值。
输出是:
Worldand
Cello
普及一下知识:
按值传参的有——String、int、char、double、float等基本类型以及其包装类
按引用传参的——除了以上那些的对象都是,如数组、字典、任何对象
String str = new String("World");
char ch[] = { 'H', 'e', 'l', 'l', 'o' };
change(str, ch);
System.out.println(str + "and"); System.out.println(ch);
}
public static void change(String strParam, char ch[]) { //str是传值,ch是传引用
strParam = "Changed";
//这里为了描述方便,把形参str改名成strParam,效果是一样的。注意,String传参的时候是传值,这个和int、char基本类型的传参形式是一样的。形参strParam和实参str是两个不同的引用,一开始它们都是指向"World"这块内存,后来,形参str="Change"以后,形参str被指向了另外一块内存"Change",而实参还是指向了“World”。所以实参str的值是没改变的
ch[0] = 'C';
//这里传参的时候,因为数组是传引用的,所有这里是把实参ch的内存地址传过来了,形参ch和实参ch都是指向了数组{ 'H', 'e', 'l', 'l', 'o' }的开头,指向的是同一个内存块,所以,其中一个改变值也就是改了同个内存块的值。
输出是:
Worldand
Cello
普及一下知识:
按值传参的有——String、int、char、double、float等基本类型以及其包装类
按引用传参的——除了以上那些的对象都是,如数组、字典、任何对象
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Worldand
char[
char[
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询