1,题目&与&&(短路)有什么区别?
int a = 3;
int b = 5;
int c = a & b;
System.out.println(c);
输出结果 1
3的二进制值 011
5的二进制值101
一个&有两个功能,既可以按位运算,也可以进行逻辑运算。 按位运算位 001 所以输出1
int a = 1;
int b = 2;
if((a==2) && ((b = 3) == 5)){
System.out.println("execute");
}
System.out.println(a);
System.out.println(b);
输出
1
2
if里a不等于2 所以后面不会被执行,所以a和b还是原来的值。
int a = 1;
int b = 2;
if((a==2) & ((b = 3) == 5)){
System.out.println("execute");
}
System.out.println(a);
System.out.println(b);
输出结果
1
3
当一个&时没有短路概念,后面的还会去执行,所以这会b被赋值为3。
2, 匿名内部类(anonymous inner class)
关于匿名内部类:该类一定是继承了某个父类或者是实现了某个接口。
public String get(Date date){
return date.toLocaleString();
}
public static void main(String[] args) {
Test test = new Test();
String result = test.get(new Date(){
public String toLocaleString(){
return "love";
}
});
System.out.println(result);
}
打印出 love
关于内部类:
1 静态内部类(static inner class)
2 成员内部类 (member inner class)
3 局部内部类(local inner class)
4 匿名内部类(anonymous inner class)
3,泛型
public void method1(List<Object> list){}
public void method2(){
method1(new ArrayList<Object>());
method1(new ArrayList<String>());
method1(new LinkedList<Integer>());
}
是否可以编译通过?
sh-3.2# javac Test.java
Test.java:17: 错误: 不兼容的类型: ArrayList<String>无法转换为List<Object>
method1(new ArrayList<String>());
^
Test.java:18: 错误: 不兼容的类型: LinkedList<Integer>无法转换为List<Object>
method1(new LinkedList<Integer>());
^
注: 某些消息已经过简化; 请使用 -Xdiags:verbose 重新编译以获得完整输出
2 个错误
不能编译通过。
关于泛型的继承:
ArrayList<Object> 继承了 List<Object>
ArrayList<String> 没有继承 List<Object>
public void method3(List<? extends Object> list){
}
public void method4(){
method3(new ArrayList<Object>());
method3(new ArrayList<String>());
method3(new LinkedList<Integer>());
}
是否可以编译通过?
可以。
public void method5(List<?> list){
}
public void method6(){
method5(new ArrayList<Object>());
method5(new ArrayList<String>());
method5(new LinkedList<Integer>());
}
是否可以编译通过?
可以。
说明:
List<? extends Object> list 等同于 List<?> list
传进来的类型,只要是继承Object的就没有问题。