01_Java語言基礎
只整理易出錯或小重點,並非教學
Huang Po-Hsuan
105.07.12
無意義保留字
1. goto
2. const:以 final 作為替代 (之後介紹)
輸出
public class PrintTest {
public static void main(String[] args){
System.out.println(3+3+"3"+3);
System.out.println(3+"3"+3+3);
//從左方開始加,遇到字串就換轉成字串
}
}
run:
633
3333
public class NameTest {
public static void main(String[] args){
//命名若為符號開頭,僅限 _ 和 $
int _t = 0;
int $t = 0;
int t = 2_000_00_0;//可用 _ 作為數字的間隔,不影響其值
System.out.println(_t+" "+$t+" "+t);
}
}
命名符號開頭僅限 _ 和 $
run:
0 0 2000000
基本資料型別 float 宣告
public class FloatTest {
public static void main(String[] args) {
// float f = 3.14;//Error!!!!
float f = 3.14F;//postfix : D、F、L
System.out.println(f);
}
}
run:
3.14
基本資料型別 short 相加
public class ShortTest {
public static void main(String[] args){
short s1 = 1,s2 = 2;
// short s3 = s1 + s2;//Error
short s3 = (short)(s1 + s2);//強制轉型
System.out.println(s3);
}
}
整數家族都應注意此問題
run:
3
算術運算優先權
double > float > long > int
ex:
1.0 + 1 全變成 double 作運算
1L + 1 全變成 long 作運算
注意 double 和 int 分別是浮點數和整數的預設型別
字串比較
public class StringCompare {
public static void main(String[] args){
char c1 = 'A';
char c2 = 'A';
System.out.println(c1 == c2);
char[] c3 = new char[]{'A','A'};
// System.out.println(c3[1] == c3[2]);//Error
System.out.println(c1 == c3[1]);
String s1 = "java";
String s2 = "java";
System.out.println(s1 == s2);
String s3 = new String("java");
String s4 = new String("java");
System.out.println(s3 == s4);
System.out.println(s3.equals(s4));
}
}
因為位址不同
要比較內容使用 .equals()
run:
true
true
true
false
true
陣列和字串的 length
public class Length {
public static void main(String[] args){
/*陣列*/
int[] i = new int[10];
int len1 = i.length;//屬性
System.out.println(len1);
/*字串*/
String s = "Java";
int len2 = s.length();//方法
System.out.println(len2);
}
}
run:
10
4
邏輯判斷
短路 (&&、||) 代表不一定會執行全部的敘述
非短路 (&、|) 則不管如何兩端都執行
ex : || 若左方為 true 則不會執行右方敘述就回傳 true
&& 若左方為 false 則不會執行右方敘述就回傳 false
public class AndOr {
public static void main(String[] args){
int a = 1;
int b = 2;
System.out.println("a > b : "+(a > b));
System.out.println("a < b : "+(a < b));
System.out.println("a > 0 : "+(a > 0));
System.out.println("b > 0 : "+(b > 0));
System.out.println("(a > b)|(a > 0) : "+((a > b)|(a > 0)));
System.out.println("(a > b)||(a > 0) : "+((a > b)||(a > 0)));//短路
System.out.println("(a > b)&(a > 0) : "+((a > b)&(a > 0)));
System.out.println("(a > b)&&(a > 0) : "+((a > b)&&(a > 0)));//短路
}
}
run:
a > b : false
a < b : true
a > 0 : true
b > 0 : true
(a > b)|(a > 0) : true
(a > b)||(a > 0) : true
(a > b)&(a > 0) : false
(a > b)&&(a > 0) : false
看起來都一樣 OuO
啊不就都用短路就好,有差嗎?
有
如果判斷語句裡有算術運算時
就可能會用到非短路形式 OuO
public class ShortCircuitTest {
public static void main(String[] args){
int a1 = 1, b1 = 2;
System.out.println("(a1++ > b1++)&(a1++ > 0) : "+((a1++ > b1++)&(a1++ > 0)));
System.out.println("a1 = "+a1+", b1 = "+b1+'\n');
int a2 = 1, b2 = 2;
System.out.println("(a2++ > b2++)&&(a2++ > 0) : "+((a2++ > b2++)&&(a2++ > 0)));//短路
System.out.println("a2 = "+a2+", b2 = "+b2);
//因為(a1++ > b1++)為 false,所以不執行(a2++ > 0)的判斷
}
}
run:
(a1++ > b1++)&(a1++ > 0) : false
a1 = 3, b1 = 3
(a2++ > b2++)&&(a2++ > 0) : false
a2 = 2, b2 = 3
外覆類別介紹
基本型別 ==> 外覆類別
byte ==> Byte
short ==> Short
int ==> Integer
long ==> Long
float ==> Float
double ==> Double
char ==> Character
boolean ==> Boolean
在文字轉成數字時會用到外覆類別
public class Convert {
public static void main(String[] args){
/*文字轉數字*/
String s1 = "34";
int i1 = Integer.parseInt(s1);
System.out.println(i1);
/*數字轉文字*/
int i2 = 56;
// String s2 = i2+"";//可用但不建議
String s2 = String.valueOf(i2);
System.out.println(s2);
}
}
run:
34
56