java存储问题

shiwanxipi 2017-07-25 03:44:07
public class testMain {
String str=new String("good");
char[] ch={'a','b','c'};
public static void main(String[] args) throws Exception{
testMain ex=new testMain();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+"and");
System.out.print(ex.ch);
}
public void change(String str ,char ch[]){
str ="test ok";
ch[0]='g';
}

为什么输出是goodandgbc?
...全文
111 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
李德胜1995 2017-07-25
  • 打赏
  • 举报
回复
String str ,char ch[]传递的都是地址的拷贝,也就是两个str和连个ch在栈中都指向同一个堆的对象,

执行下面两步
str ="test ok";//指向常量池的test ok没有对对象进行修改,所以第一个str打印的还是good
ch[0]='g';//对对象的内容直接修改。。。下标0被改为g,所以打印gbc

qq_35942223 2017-07-25
  • 打赏
  • 举报
回复
ex.str=good ,ex.ch={'g','b','c'},然后输出goodandgbc,str ="test ok";而str是指你传参那个形参,你如果想改变全局的str可以改为this.str="test ok";

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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