这道题为什么选B

发布于 2022-09-02 08:47:17 字数 536 浏览 37 评论 0

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 ");
    for(int i=0;i<ex.ch.length;i++){
System.out.print(ex.ch[i]);
}
  }
  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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦里泪两行 2022-09-09 08:47:17

java 中只有值传递,在方法参数中传递的都是副本。

  1. 如果传递的是原始类型(byte, short, int, long...),传递过来的就是这个参数的副本,也即参数的值。

  2. 如果传递的是引用类型(class, interface, array...),传递的就是引用参数的副本,(引用类型可理解为指向一个特定数据存储区的变量)。

void change(String str,char ch[]) 里传递的都是引用副本,如果在方法内修改了引用指向,比如str="test ok"; 那么原来的引用ex.str ex.ch还是不会变的, 但是改变引用指向存储区的数据ch[0]='g';,所有引用获取的数据都会改变(指向的都是同一个区域)。

哥,最终变帅啦 2022-09-09 08:47:17

额,下面已经把'a'改'g'了

一袭白衣梦中忆 2022-09-09 08:47:17

传值跟传址的原因吧

过去的过去 2022-09-09 08:47:17

楼上说的不完全对,就算在change方法中不传str参数,change方法依旧无法改变str的值。
说到底,str= "abc"与str=new String("abc")在内存中是完全不同的表现形式。
前者直接指向字符串,而后者指向的是一个String对象。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文