java程序分析题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java程序分析题?相关的知识,希望对你有一定的参考价值。

大佬们,我写的答案都对吗?

第1题应该是:
false
false
因为:
1.
==和equals都是返回boolean类型的值(只可能是true或false)
2.
==是比较引用是否相等,显然b1和b2并不是引用的同一个对象。
3.
B类并没有覆盖Object类的equals方法,因此调用的是继承自Object类的equals方法,而Object类的这个方法也是比较的引用。

第7题应该是:
in Second class
in Second class
因为子类覆盖了父类的aMethod方法,父类的构造方法中调用的aMethod是子类的。追问

啊?我傻了,为什么会调用子类的?他自己不是有吗?

如果是String s1=“abc”;String s2=“abc”;s1==s2可比吗?是true还是false?

追答

回答第1个问题:
因为你创建的是子类的对象。
当子类覆盖了父类的某个方法时,实际创建的是哪个类的对象,调用的就是那个类的对应的方法,这是多态性。

回答第2个问题:
可比,答案是true。
要明白为什么,得了解以下知识点:
1.
有一块内存叫内置池,专门用来存储字符串常量(包括字符串直接量——用双引号括起来的字符串和final类型的字符串对象)。
2.
调用构造方法创建的String类的对象的内存都分配在堆中(不是在内置池中)。

所以,对于问题2,一开始内置池为空,然后从String s1="abc";找到字符串直接量"abc",将它保存到内置池中,并令s1引用(指向)这个内置池中的对象。然后,当执行到String s2="abc";时,因为"abc"已在内置池中,就不会再在内置池中创建一个String对象"abc"了,而是令s2引用这个内置池中已有的对象。所以,最终结果是s1和s2引用的是同一个内置池中的对象。而如前所说,==比较的是引用,s1==s2当然为true(它们引用的是同一个对象)。

但如果有String s1="abc";String s2=new ("abc");则s1==s2为false,因为s1引用的是内置池中的"abc"
,而s2引用的是堆中的"abc"。

最后,关于多态、String类、内置池的更多的知识,你自己去查吧。这些不是一两句话就能讲清楚的。

追问

感谢!

参考技术A 恭喜你。答案全布对。追问

啊?全不对?

以上是关于java程序分析题?的主要内容,如果未能解决你的问题,请参考以下文章

java题谢谢,麻烦给出程序

Java重写《C经典100题》 --26

Java重写《C经典100题》 --36

Java重写《C经典100题》 --07

12道java经典入门算法题!

Java重写《C经典100题》 --40