1. 九种基本数据类型的大小,以及他们的封装类。
boolean, byte, char, short, int, long, float, double, void.
类型 | 字节 | 表示范围 | 包装类 |
---|---|---|---|
byte(字节型) | 1 | -128~127 | Byte |
short(短整型) | 2 | -327768~32767 | Short |
int(整型) | 4 | -2147483648~2147483647 | Integer |
long(长整型) | 8 | -9223372036854775808 ~ 9223372036854775807 | Long |
float(浮点型) | 4 | -3.4E38~3.4E38 | Float |
double(双精度型) | 8 | -1.7E308~1.7E308 | Double |
char(字符型) | 2 | 从 字 符 型 对 应 的 整 型 数 来 划 分 , 其 表 示 范 围 是 0 ~ 65535 | Charater |
booealn(布尔型) | 1 | true 或 false | Boolean |
2. Switch 能否用 string 做参数?
在 Java 7 之前,switch 只能支持 byte、short、char、int 或者其对应的封装类以及 Enum
类型。在 Java 7 之后,String 支持被加上了。
3. equals 与== 的区别。
“==”比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】
equal 用于比较两个对象的值是否相同【不是比地址】
【特别注意】Object 类中的 equals 方法和"==“是一样的,没有区别,而 String 类,Integer类等等一些类,是重写了 equals 方法,才使得 equals 和”=="不同,所以,当自己创建类时,自动继承了 Object 的 equals 方法,要想实现不同的等于比较,必须重写 equals 方法。
"==“比"equal"运行速度快,因为”=="只是比较引用.
4. Object 类到底实现了哪些方法?
(1)clone 方法
保护方法,实现对象的浅复制,只有实现了 Cloneable 接口才可以调用该方法,否则抛出
CloneNotSupportedException 异常。
主要是 JAVA 里除了 8 种基本类型传参数是值传递,其他的类对象传参数都是引用传递,我
们有时候不希望在方法里讲参数改变,这是就需要在类中复写 clone 方法。
(2)getClass 方法
final 方法,获得运行时类型。
(3)toString 方法
该方法用得比较多,一般子类都有覆盖。
(4)finalize 方法
该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。
(5)equals 方法
该方法是非常重要的一个方法。一般 equals 和==是不一样的,但是在 Object 中两者是一样
的。子类一般都要重写这个方法。
(6)hashCode 方法
该方法用于哈希查找,可以减少在查找中使用 equals 的次数,重写了 equals 方法一般都要
重写 hashCode 方法。这个方法在一些具有哈希功能的 Collection 中用到。
一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),
但是 hashCode 相等不一定就满足 equals。不过为了提高效率,应该尽量使上面两个条件接
近等价。
如果不重写 hashcode(),在 HashSet 中添加两个 equals 的对象,会将两个对象都加入进去。
(7)wait 方法
wait 方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有
该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个
超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(7.1)其他线程调用了该对象的 notify 方法。
(7.2)其他线程调用了该对象的 notifyAll 方法。
(7.3)其他线程调用了 interrupt 中断该线程。
(7.4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个 InterruptedException 异常。
(8)notify 方法
该方法唤醒在该对象上等待的某个线程。
(9)notifyAll 方法
该方法唤醒在该对象上等待的所有线程。
5. String 、StringBuffer 与 与 StringBuilder 的区别
String 类型和 StringBuffer 的主要性能区别:String 是不可变的对象, 因此在每次对
String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的
String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对
系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,性能
就会降低。
使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的
对象并改变对象引用。所以多数情况下推荐使用 StringBuffer ,特别是字符串对象经常改
变的情况下。
StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的
StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的
StringBuilder 与 StringBuffer 有公共父类 AbstractStringBuilder(抽象类)。