该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-24
前几天,网上找了套java题目,给项目组成员做了一次考试,意图是让大家知道很多基础概念还不一定清楚,于是应该good good study,day day up。 考试之后,有同事问起一个“by value”知识点相关的题目: Given the following code: public class Test{ //System.out.println(str + " and " + ch); What is the result after execution? 其他同事回信解释,涉及到“final class”和“不变类”两个概念。看来非常基础的概念也不是所有人都清楚,此次我把我回信的内容放在博客中,做个备份。可能会对非常非常初学的初学者有用。 String类是final的没错,这只是说明它不能够被其他类extends。跟这里的题目是没有关系的。 同时,String是不变类。没有任何一个语句可以在已经生成的String对象上做改变。比如"CC"是一个String对象,不可能有语句把"CC"的,比方说,第二个字符由"C"改成,比方说,"A";"CC"自从它被初始化,就永远是"CC","CA"是另一个对象。是不是不变类,跟这里的题目也没关系。 再比如另一段代码: public static void main(String[] args) { public static void change(Person p) { class Person {
这里,by value的意思,不知道大家真正理解了没有。 str的value是对"World"这个对象的引用。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-01-26
看起来lz基础也不好啊
四个答案一个都不对,System.out.println(char[])可不是把char[]组装成字符串打印出来 |
|
返回顶楼 | |
发表时间:2007-01-26
恩,System.out.println(char[])打印的和普通类一样,是内存地址。
|
|
返回顶楼 | |
发表时间:2007-01-26
第二题,打印的应该还是"me"。因为change()方法中p = new Person("another one");把原来传进来的形参的reference改成了新的类Person("another one")。如果去掉了那句话,形参的reference还是传进来的那个,打印的结果就是"third one"了。
|
|
返回顶楼 | |
发表时间:2007-01-27
看下面
|
|
返回顶楼 | |
发表时间:2007-01-27
二楼、三楼的兄弟不知道有木有试过。
public static void main(String[] args) { char ch[]={'H','e','l','l','o'}; System.out.println(ch); } 看看这段代码究竟打印什么。 |
|
返回顶楼 | |
发表时间:2007-01-27
哦。杲杲还是有很多基础概念不清晰。
char ch[]={'H','e','l','l','o'}; System.out.println(ch); 这里确实打印:Hello 但下面这句话 System.out.println(ch + " and World"); 就是打印ch的内存地址+空格+" and World"了。 二楼、三楼的兄弟的批评让我发现了这个问题。多谢。 |
|
返回顶楼 | |
发表时间:2007-04-19
还是要平时注意对基础的积累啊,不看这两道题真不知道自己的基础这么薄弱,“值传递”、“引用传递”、“打印内存地址”等等,好像一下子全忘光了。
|
|
返回顶楼 | |
浏览 7026 次