第一部分 編程基礎與二進制
第一章 編程基礎
基本類型
-
小數常量默認是double類型,所以在給float類型賦值時要在後面加上大寫或小寫的F
double d=333.33; float f=333.33f;
-
整數常量默認是int類型,所以給long類型賦值的時候如果數值的範圍超出整型,要在後面加大寫或小寫的L
int a=123; long b=3333333333L
數組
基本類型的數組有三種賦值形式
int[] arr={1,2,3};
int[] arr=new int[]{1,2,3};
int[] arr=new int[3];
arr[0]=1;arr[1]=2;arr[2]=3;
//錯誤的賦值方式⬇
int[] arr=new int[3]{1,2,3};
聲明數組時標識符所值地址存放的值是數組元素的引用,指向數組值那塊內存,如下表,以上面聲明的arr數組爲例
內存地址 | 內存數據 |
---|---|
2000 | 3000 |
3000 | 1 |
3004 | 2 |
3008 | 3 |
所以用數組進行賦值時傳遞的是引用
int[] arr1=new int[]{1,2,3};
int[] arr2=new int[]{1,2,3,4};
System.out.println(arr2);
arr1=arr2;
System.out.println(arr1+":"+arr1.length);
所以給數組中的變量賦值和給數組中的元素賦值是完全不一樣的概念
運算符號
|與||,&與&&的區別:||和&&存在"短路"操作,用|和||舉例
System.out.println(true|++a>0);
System.out.println(true||++b>0);
System.out.println(a);
System.out.println(b);
/**
輸出:
a:1
b:0
**/
條件執行
爲什麼switch要比if…else…快?
因爲switch語句在編譯的時候會生成一個map表映射所要跳轉的代碼塊的位置,運行的時候可以直接查表,(省去了if…else…中的cmp, jmp -> cmp, jmp -> cmp, jmp…這一冗長的計算過程。)
循環
for循環的執行流程如下
- 執行初始化語句
- 判斷條件是否成立
- 如果成立執行循環體
- 執行步進操作如i++
- 跳轉到第2步,繼續執行
- 2不成立後跳出
函數
-
將數組當作參數傳遞時,在函數中改變數組的值會引起數組內容的改變
public static void change(int[] arr){ for(int i=0;i<arr.length;i++){ arr[i]=i+5; } } public static void main(String[] args){ int[] arr1=new int[]{1,2,3}; change(arr1); for(int i:arr1){ System.out.println(i); } } 輸出: 5 6 7
-
可變長度參數
package online.hengtian; import java.util.Optional; public class Test3 { public static int getMax(int ...a){ int max=a[0]; for(int i=1;i<a.length;i++){ if(a[i]>max) max=a[i]; } return max; } public static void main(String[] args){ Optional.of(getMax(1,2,3,4,5,6,7)).ifPresent(System.out::println); } }