问一个概念问题 我的翻译如下:Java在参数中仅仅是值传递。当一个对象的实例被当作一个参数传入一个方法时,这个参数的值时这个对象的一个引用。对象的内容可以在这个方法的内部改变,但是这个对象的引用时不会变的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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" + ch);}public static void change(String str, char ch[]){str="Changed"; ch[0]='C';}}那这个输出将是什么?解释一下,我很糊涂 是ChangedandCello,因为你没有加空格,所有输出这个。如果没有Change(str,ch)这句应该输出WorldHello,加上Change(str,ch)后就调用Change函数,吧str的内容变成了Changed了,ch[0]的内容变成C了,所以出现上面的结果。 呵呵,这和java认证考试上面的答案不一样哦答案输出是WorldandCello,答案错了? 不好意思,我作了下测试,结果是Worldand[C@92d342,前面没变,后面是ch数组的地址。我把程序改动了一下 public class FJava { String str=new String("World"); char ch[]={'H','e','l','l','o'}; public static void main(String args[]) { FJava fjava=new FJava(); fjava.change(fjava.str,fjava.ch); } public static void change(String str, char ch[]) { str="Changed"; ch[0]='C'; System.out.println(str+"and"+String.valueOf(ch)); }}现在能得到ChangedandCello了,现在分析一下可能的原因,你刚才的str是定义在静态方法main中的,所以println调用的就是原来的str,他的值是不会改变的。 To:promised(乐乐天) ( 一级(初级)好好看书去。不要把你的c/C++的观念带来。你也要看看c/c++中关于指针,以及指针引用方面的书籍。TO:Diadem(可乐可口) 答案是对的。 谢谢教诲,可是上面的程序确实是Worldand[C@92d342 结果阿,后面的不就是ch的地址吗? To zosatapo(隆杰@宗山太保)请多指教,能否给我解释一下为什么会那样输出也谢谢promised(乐乐天) 认证的答案是错的。其实这你只要亲自编译运行一下就知道了。输出是类似Worldand[C@92d342的东西,ch是数组句柄,数组句柄本质上就是java中的指针,是地址值,把它当字符串输出,自然输出的是地址值。在某些方面,java还脱不了c++的影子,它是怎么来的? 其实在Java中对值传递的问题,你只要记住以下两点就可以了: 1.如果该类的方法实现中引用的是类的变量,那么在方法使用以后,该值不会发生改变.(实际上在对变量作值传递时,Java是将该变量的值作了一个Copy) 2.如果该类的方法实现中传入的是一个对象,比如数组对象或者字符串对象,那么在方法完成以后,该值发生变化. 更正一下,看了object的tostring的文档,[C@92d342应该不是数组的内存地址,应该是按object的tostring方法输出的,但保留自己的两点看法:1、认证答案有错;2、数组本质上是一个指针。 To luzegang(求知者) 我还有些不明白,java里面任何东西都是对象(Everything is an Object)那我怎么区别传递的参数是object还是其他的 我理解如果是object,那在传递的时候,传递形式应该是ClassName.Object,如果是其他,可能不是以这种形式来传递。 把酒言欢老兄的话应做如下理解:一却都是传值,故在被调用的方法中,总有你传递的参数的拷贝。无论其是基本型(int)或是object。class test{public static void main(String args[]){ String str=new String("World"); char ch[]={'H','e','l','l','o'}; System.out.println(change(str,ch) + ":and:" + ch[0]);}public static String change(String str, char ch[]){ str="Changed"; ch[0]='C'; return str;}} 初学者,在看IanF.Darwin著《Java经典实例》的时候遇到的字符串问题: applet 布局问题 为什么输出的图片是全黑的? 一个时钟程序,请高手帮忙看一下!!! 如何监视线程执行的结果? 通宵在线求助,谢谢了 大家帮我看看这段多线程的同步方法问题的程序为什么会有这样子的运行结果吧 请问关于string类的问题,郁闷啊 请教各位高手,关于java安全策略的问题(用Appleviewer可以,用IE不行) 在JAVA数据库编程中,怎么对两个不同类型的数据库同时操作? 请问Java随机数的使用? 请说说您的JAVA开发环境,以及相关工具的下载地址
如果没有Change(str,ch)这句应该输出WorldHello,
加上Change(str,ch)后就调用Change函数,吧str的内容变成
了Changed了,ch[0]的内容变成C了,所以出现上面的结果。
答案输出是WorldandCello,答案错了?
我把程序改动了一下
public class FJava {
String str=new String("World");
char ch[]={'H','e','l','l','o'}; public static void main(String args[]) {
FJava fjava=new FJava();
fjava.change(fjava.str,fjava.ch); }
public static void change(String str, char ch[]) { str="Changed"; ch[0]='C';
System.out.println(str+"and"+String.valueOf(ch)); }
}
现在能得到ChangedandCello了,现在分析一下可能的原因,你刚才的str是定义在静态方法main中的,所以println调用的就是原来的str,他的值是不会改变的。
好好看书去。不要把你的c/C++的观念带来。
你也要看看c/c++中关于指针,以及指针引用方面的书籍。TO:Diadem(可乐可口)
答案是对的。
请多指教,能否给我解释一下为什么会那样输出也谢谢promised(乐乐天)
1.如果该类的方法实现中引用的是类的变量,那么在方法使用以后,该值不会
发生改变.(实际上在对变量作值传递时,Java是将该变量的值作了一个Copy)
2.如果该类的方法实现中传入的是一个对象,比如数组对象或者字符串对象,那么在方法完成以后,该值发生变化.
我还有些不明白,java里面任何东西都是对象(Everything is an Object)
那我怎么区别传递的参数是object还是其他的
一却都是传值,故在被调用的方法中,总有你传递的参数的拷贝。无论其是基本型(int)或是object。
class test{
public static void main(String args[]){ String str=new String("World"); char ch[]={'H','e','l','l','o'};
System.out.println(change(str,ch) + ":and:" + ch[0]);}public static String change(String str, char ch[]){ str="Changed";
ch[0]='C';
return str;}}