Java面试题!!!急!!!!

haqingpa 2017-12-25 07:12:15
public static void main(String[] args) {

String str = "good morning";
char ch [] = {'m','n','q'};
change(str, ch);
System.out.println(str+","+ch[1]);
}
public static void change(String str , char ch []){

str = "good night";
ch[1] = 'y';
}
请问 输出 结果 是什么?
...全文
1270 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
stacksoverflow 2018-07-25
  • 打赏
  • 举报
回复
str = "good night"; //改变了局部变量str的指向地址,并没有改变原有地址的内容。
ch[1] = 'y'; //改变了ch[1]地址上的内容。
所以是 good night y
qq_37105320 2018-01-14
  • 打赏
  • 举报
回复
为什么cha[1]stringbuild之后是myq
布衣小哥 2018-01-09
  • 打赏
  • 举报
回复
good morning myq
wuzhou2222 2018-01-09
  • 打赏
  • 举报
回复
测试了一下是good morning myq
初见_冰 2018-01-09
  • 打赏
  • 举报
回复
引用 13 楼 qq877988484 的回复:
good morning myq
这个对哦
Jsono8 2018-01-09
  • 打赏
  • 举报
回复
good morning, y 改变的是字符数组中的值,相当于C语言中的指针传递。
aiziji2242464 2018-01-09
  • 打赏
  • 举报
回复
good morning,y
自由自在_Yu 2018-01-05
  • 打赏
  • 举报
回复
引用 10 楼 yuxiangaaaaa 的回复:
值传递过程中对象是不会变的,对象的属性会改变,str是一个String对象,change方法不会改变原来的str ch[1] 是char ch []的一个属性,就是数组ch的其中一个项,传值过程中会发生改变
http://blog.csdn.net/zhzhao999/article/details/53449504
自由自在_Yu 2018-01-05
  • 打赏
  • 举报
回复
值传递过程中对象是不会变的,对象的属性会改变,str是一个String对象,change方法不会改变原来的str ch[1] 是char ch []的一个属性,就是数组ch的其中一个项,传值过程中会发生改变
changjiangzhibin 2018-01-05
  • 打赏
  • 举报
回复
实参是值类型和引用类型的区别
依然_范特西_ 2018-01-05
  • 打赏
  • 举报
回复
java方法的参数是值传递还是引用传递的问题
Mike_csy 2018-01-04
  • 打赏
  • 举报
回复
不知道你解决没有,5楼说的很对,String类型是引用数据类型并且是final修饰的,作为参数传到一个方法是将主指向“good morning”的str引用传过去,在方法change()内部的str = "good night"是重新创建了一个String类型的引用指向该对象并没有改变原引用指向的对象。
yasashii 2018-01-04
  • 打赏
  • 举报
回复
good morning,y
爱摸鱼de老邪 2017-12-25
  • 打赏
  • 举报
回复
在Java中,String对象是不可变的,任何修改String值的方法,实际上都会创建一个新的String对象。每当把String对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上从未变动过。change方法中,参数str已经是外部str的引用拷贝了。
悯世的黑骑士 2017-12-25
  • 打赏
  • 举报
回复
拍砖引玉吧 实测版本:Java1.8 输出结果:good morning,y 原因:两个变量,一个是字符串,一个是数组,这里应该考察的是函数内部修改,在java中分为两种情况, 一、如果传递的是基本类型,那么会重新开辟内存,修建一个变量,将原来的值赋予它,类似于将copy过来,所以即便修改了,原来的值不会改变; 二、如果是引用类型或者对象,那么参数传递的就是引用(句柄),内存池中不会有新的变量产生,就可以修改实际的值; 扩展,你今后在工作中遇到,如果值需要修改一个值,那么就用函数返回值的形式:str=change(str, ch);如果需要修改多个值,那只能用数组或者对象了。 另外,如果是int、boolean这些基本类型,如上所说,而这里String应该不属于基本类型,为什么值没有发生改变,我就不太清楚了,还请其他大神不吝赐教。
oyljerry 2017-12-25
  • 打赏
  • 举报
回复
对于String类型的参数str,函数内部的修改,会让str的引用的副本指向一个新的引用,因而函数返回后,原来的str不会改变 而对于参数数组ch的引用副本,它基于下标的修改,会修改原来的ch对应的下标元素。
haqingpa 2017-12-25
  • 打赏
  • 举报
回复
可否简单说一下解析过程
  • 打赏
  • 举报
回复
good morning,y

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧