1. 九种基本类型的大小及其封装类。
数据类型 | 字节大小 | 默认值 | 封装父类 |
short | 2 | 0(short) | Short |
int | 4 | 0 | Integer |
long | 8 | 0L | Long |
float | 4 | 0.0f | Float |
double | 8 | 0.0d | Double |
char | 2 | nulll u\000 | Character |
boolean | false | Boolean | |
byte | 1 | Byte | |
void | Void |
2.Switch能不能用String做参数?
jdk7之前,Switch只支持int, byte , char, boolean ,short 及其他们对应的封装类和enum类,之后加入了String
3.equals 和 == 的区别。
a.基本数据类型用== ,是比较他们的值.
b.复合数据类型(类)用== 是比较他们的地址,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同.
4.Object有哪些公用的方法(八个)。
a. clone
复制类(实现Cloneable)的方法,p1 = (P)p.clone(); 与 p1 = p 的区别是 前者创建了一个新的对象,而后者只是多了一个引用。
b. equals
在Object中与==是一样的,子类一般需要重写该方法
c. hashCode()
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到
d. getClass()
final方法,获取运行时的类型。
e. wait
是当前线程等待改对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout) 设定一个超时间隔,如果在规定的时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到下面的事情发生:
1. 其他线程调用了该对象的notify方法
2.其他线程调用了该对象的notifyall方法
3.其他线程调用了interrupt中断了改线程
4.时间间隔到了
此时该线程就可以被调度了,如果是被中断的话就会抛出一个InterruptedException的异常。
注:sleep 和 wait 的区别: sleep是Tread类中,wait是Object的方法,sleep方法是导致程序暂停执行指定的时间,让出cpu给其他线程,但是他的监控状态依然保持着,当指定时间到了又会自动回复运行状态,在调用sleep方法过程中,线程不会释放对象锁。
当调用wait方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify方法后本线程才进入对象锁定池准备获取对象锁 进入运行状态。
f .notify
唤醒该对象上等待的某个线程
g. notifyAll
唤醒该对象上等待的所有线程。
h.toString
转成字符串,一般子类都有重写,否则打印句柄(类名+地址);