Thought Coding实验室2016年纳新笔试题
姓名: _______ 班级: ________ 联系方式: ________
Java部分
一、请看下面这段程序,回答问题
public class Test1 {
public static void main(String[] args){
StringBuffer a = new StringBuffer("Thought"); //语句1
StringBuffer b = new StringBuffer("Coding"); //语句2
operate(a, b);
System.out.println("a = " + a);
System.out.println("b = " + b);
}
static void operate(StringBuffer x, StringBuffer y){
x.append(y); //语句3
y = x;
}
}
1、这段程序的输出结果是什么?为什么?
输出:
a = ThoughtCoding
b = Coding
解释:考察Java参数传递机制与StringBuffer的使用。
operat方法传入两个StringBuffer类型的句柄的副本(也可以说是指向堆内存中StringBuffer对象的指针的副本),一个是x,一个是y,执行”x.append(y);”后,y指向的StringBuffer对象内容”Coding”连接在x指向的StringBuffer对象的字符串内容(底层是一个value[]数组)后,执行”y = x;”后,只是修改了y的指向,并没有修改y指向的StringBuffer对象的字符串内容,在方法执行结束后,x、y自然消亡。
2、把上述程序中的语句1、2、3分别修改为:
String a = "Thought";
String b = new String("Coding");
x = x + y;
输出结果又是什么?为什么有这样的区别?
输出:
a = Thought
b = Coding
解释:考察String的使用以及与StringBuffer区别。
String使用private final char value[]来实现字符串的存储,也就是说,String对象创建之后,就不能修改对象中存储的字符串内容。另外,Java对String重载了”+”操作符,可以直接使用”+”对两个字符串进行连接。