9 &與&&有什麼區別?| 內部類 | 泛型
阿新 • • 發佈:2018-12-26
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的就沒有問題。