Java易混淆概念与重点知识积累 第三篇

StringStringBufferStringBuilder对比

String类是不可变类,任何对String的改变都会引发新的String对象的生成StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。

(字符串增长)测试案例:

2711 millis hascosted when used String.
211 millis has costed when used StringBuffer.
141 millis has costed when used StringBuilder.

 

5266 millis haselapsed when used String. 
375 millis has elapsed when used StringBuffer. 
281 millis has elapsed when used StringBuilder. 

StringBuffer和StringBuilder在使用(方法)上几乎一样

如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;如果要保证线程安全,自然是优先使用StringBuffer了。

 

HashMap和HashTable对比

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差别。

 

ArrayListLinkedList对比

ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦
LinkedList
采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引 但是缺点就是查找非常麻烦要丛第一个索引开始
 1.ArrayList是实现了基于动态数组的数据结构,
LinkedList基于链表的数据结构。

 2. 对于随机访问getsetArrayList优于LinkedList,因为LinkedList要移动指针。

 3. 对于新增和删除操作addremoveLinedList比较占优势,因为ArrayList要移动数据 

 

String s = newString("xyz");创建了几个String Object?

答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s

 

==equals的区别?

答:==用于判断两个引用变量是否指向同一个对象实例.

    equals用于判断两个值是否相等.

问:抽象类是否可继承实体类 (concrete class)

答:抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数

其实从Object就是个实体类。

 

Anonymous Inner Class (匿名内部类是否可以extends(继承)其它类,是否可以

implements(实现)interface(接口)? 

 匿名的内部类是没有名字的内部类。不能extends(继承其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

 

Java里面有没有全局变量?为什么?

 

Global variables(全局变量)是指可以全局访问的变量,Java不支持全局变量,原因如下:
1. 全局变量破坏了引用的透明性。

2. 全局变量制造了命名空间冲突。

 

Java变量的分类 

1)按变量所属的数据类型划分,可分为2种: 基本数据类型变量 

Java基本数据类型包括byteshortcharintlongfloatdoubleboolean 一共8种,所以比如,int i; 就是基本数据类型变量 引用数据类型变量 

除了这8种基本数据类型以外,全是引用数据类型,目前有  类、接口、数组、枚举、注解 所以 String s; 就是引用数据类型变量 

2)按变量声明的位置划分,也可分为2 成员变量:类内部,方法外部 声明的变量 

局部变量:方法或语句块内部声明的变量

 

Java多态性理解

多态是什么?

指允许不同类的对象对同一消息做出相应。即同一消息可以根据发送对象的不同而采用多种不同的(发送)行为方式。(发送消息就是函数调用)

实现多态的技术称为动态绑定,就是指在程序执行期间判断所引用的对象的实际类型,根据其实际的类型调用其相应的方法。多态的作用就是消除类型之间的耦合关系。

多态性存在有三个必要条件:

1、要有继承2、要有重写3、须是父类引用指向子类对象

Java中多态实现的方式:接口实现、继承父类方法进行重写、同一个类中进行方法重载。




 

 

你可能感兴趣的:(Java)