第一题肯定选B:
str是引用数据类型,而字符数组是基本数据类型,二者存放在内存中的机制是不一样的!
public void change(String str.char ch[])
{
str="test ok";
ch[0]='g';
}
传入str,虽然把"test ok"强行赋给str,但是这里的str存放在新的栈内存中,和原来的str存放的地址不一样,所以你System.out.print(ex.str+"and");这里的输出还是调用原来内存中的str;
字符数组不一样,你声明一个字符数组之后,那个数组的位置就定死了,你调用change()之后,把原来的字符数组的第1个元素改为了g.这就是引用数据类型和基本数据类型的区别.
第二题选A!
C肯定是错的! 属于lang包!
B也不对,线程实现有2种方式,第一,扩展java.lang.Thread类.第二,实现Runnable接口
从Thread类中继承的创建方式我还是可以实现Runnable接口,也就是说还是不能防止多父类的出现!!
你这一行public void change(String str.char ch[])
应该为public void change(String str, char ch[])
输出结果为goodandgbc
最接近的答案选B
Java的参数传递方式是值传递,当参数是简单类型时,不改变参数的值;当参数是引用类型时,不改变这个对象的引用。
change()的参数str和ch[]都是引用类型,在类Example中str指向"good"的地址,ch[]指向ch[]的地址,使用str="test ok"后在change()内str指向"test ok",但在类中str仍指向"good",而ch[0]仍指向ch[0],因为String与StringBuffer不同,改变它的值实际上是改变了它指向的内存地址(新开辟),但由函数返回时仍指向原地址。