1. 程式人生 > >9 &與&&有什麼區別?| 內部類 | 泛型

9 &與&&有什麼區別?| 內部類 | 泛型

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的就沒有問題。