1、Java 中,Comparator 与 Comparable 有什么不同?
1、comparable接口实际上是出自java.lang包,它有一个 compareTo(Object obj)方法用来排序
1-1、源码示例
public interface Comparable<T> {
}
2、comparator接口实际上是出自 java.util 包,它有一个compare(Object obj1, Object obj2)方法用来排序
2-1、源码示例
@FunctionalInterface
public interface Comparator<T> {
}
3、需要对一个集合使用自定义排序时,我们就要
3-1、重写compareTo方法或compare方法
3-2、使用两个参数版的Collections.sort().
2、Java 中,Serializable 与 Externalizable 的区别?
1、Serializable 接口是一个序列化 Java 类的接口,以便于它们可以在网络上传输或者可以将它们的状态保存在磁盘上,是 JVM 内嵌的默认序列化方式,成本高、脆弱而且不安全。2、Externalizable 允许你控制整个序列化过程,指定特定的二进制格式,增加安全机制。
2.1、Externalizable 是jdk1.1的遗留物,使用自定义编写的机制来执行编组和解组功能,需要在类上实现 readExternal 和 writeExternal 方法。
3、this() & super()在构造方法中的区别
1、调用super()必须写在子类构造方法的第一行, 否则编译不通过。
2、super从子类调用父类构造, this在同一类中调用其他构造均需要放在第一行。
3、尽管可以用this调用一个构造器, 却不能调用2个。
4、this和super不能出现在同一个构造器中, 否则编译不通过。
5、this()、super()都指的对象,不可以在static环境中使用。
6、本质this指向本对象的指针。super是一个关键字
4、Java移位运算符(三种)
1、<< :左移运算符,x << 1,相当于x乘以2(不溢出的情况下),低位补0
2、>> :带符号右移,x >> 1,相当于x除以2,正数高位补0,负数高位补1
3、>>> :无符号右移,忽略符号位,空位都以0补齐
5、从 Java 7 开始,可以在 switch 条件判断语句中使用 String 对象
###从 Java 7 开始,可以在 switch 条件判断语句中使用 String 对象。
public class SwitchDemo{
public static void main(String[] args){
String s = "a";
switch (s) {
case "a":
System.out.println("aaa");
break;
case "b":
System.out.println("bbb");
break;
}
}
}
###switch 不支持 long,是因为 switch 的设计初衷是对那些只有少数的几个值进行等值判断,如果值过于复杂,那么还是用 if 比较合适。