H5W3
当前位置:H5W3 > 其他技术问题 > 正文

这道题为什么选B

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

回答:

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'; ,所有引用获取的数据都会改变(指向的都是同一个区域)。

回答:

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

回答:

传值跟传址的原因吧

回答:

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

本文地址:H5W3 » 这道题为什么选B

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址