前一段时间本人将java基础学习完了, 发现一些问题和自己的一些理解,希望和大家一块探讨一下,这里只讨论一些疑问,别的问题可以下一次再讨论,例如java学习的心得。先把问题列出来吧。
面向对象
java实例化对象就是内存的引用,也可以理解为索引(c++同学可以简单理解为地址), 那比较两个对象是否相等,要实现每个元素相等,如果类的属性很多为了实现这个目的我们通常进行序列化和反序列化,个人吐槽一下特别麻烦,为什么提供一个c++中类似的memcmp()方法了?
自动拆封箱(boxing and unboxineg)
- 为什么java能自动拆封箱,那么下面代码为什么不能这样写?
|
|
测试环境idea + jdk7.0
java中有自动拆箱功能为什么做彻底点?
容器
- 为什么删除Set中元素要求这个类要继承Comparable接口,难道实现equals不就行了吗?
举个例子吧src 123Collection<Name> c = new HashSet<Name>();c.add(new Name("f1","l1"));boolean isSuccess = c.remove(new Name("f1", "l1")); //?
为什么要实现compareTo方法,java API为什么这样实现?
- 为什么和hash相关的集合,为什么要实现hashcode方法?
还是上面的例子Name不仅要实现compareTo方法,还要实现hashCode方法啊, 就是为了快速查找吗?
IO流
在学习IO的时候发现IO的类太多,如InputStream下面就用ReaderInputStream、InputStreamBuffer等等, 还用Reader、Writer、OutputStream等子类,一方面是太多,另一方面什么情况下用哪些类,
这是个问题。
发射
- 反射可以做什么?
个人理解主要可以用在程序运行中可以动态调用程序类和方法,知道的设计模式中动态proxy实现就用的inflate实现的, 但是当我们发布releases版本时候一般都进行了代码混淆, 这样反射就不起作用了。
总结
谁然有上面的疑问, 我还是感觉java中学到很多东西和思想。以前不喜欢java。后来发现,我从java获得的东西比其他语言上学得东西要多。