12.25筆記與作業
1、資料型別:
數值型:整型{整型(int)、短整型(short)、位元組型(byte)、(長整型 )long}
浮點型:double、float
非數值型:字元型(char)、布林型別(boolean)、字串型別(String)、其它引用型別
面試題1:1、請問JAVA中8大基本型別?
答:數值型:整型(int)、短整型(short)、位元組型(byte)、(長整型 )long
浮點型:double、float
非數值型:字元型(char)、布林型別(boolean)
2、資料型別轉換:
public class GuanXi { public static void main(String[] args) { int a = 1; double b = a; System.out.println(b); } }
結果為:1.0;
此為自動型別轉換,原則:1、型別可以相容;2、目標型別大於源型別;
public class GuanXi { public static void main(String[] args) { double a = 12.5; int b = (int)a; System.out.println(b); } }
結果為:2;
此為強制型別轉換,原則:1、型別可以相容;2、目標類弄小於源型別;
3、運算子
a、賦值運算子: =
b、算術運算子:+、-、*、/、%、++、--、+=、-=、*=、/=
c、關係運算符:==、!=、>、<、>=、<=
d、邏輯運算子:&、|、^、!、&&、||
e、位運算子:&、|、^、~、<<、>>、>>>
f、條件運算子(也號三目運算子或三元運算子)
表示式為:
條件?表示式1:表示式2 即條件為TRUE執行表示式1,FALSE執行表示式2
4、關係運算符:==、!=、>、<、>=、<=
A、=為賦值運算子,==為等於運算子
B、關係表示式的結果為布林值
C、>、<、>=、<=運算子的優先級別高於==、!=
D、>、<、>=、<=運算子只支援數值類弄的資料比較
PS:基本資料型別在做關係運算時,直接將變數值進行比較運算;引用型資料型別,在做關係運算時,比較的是地址(如String);
1)、數值型之間的比較運算
package com.java12_25; //數值型之間的比較運算 public class GuanXi { public static void main(String[] args) { int a = 12; //聲時變數並賦值 double b = 11.6; //聲時變數並賦值 System.out.println(12>11.6);//直接數值比較,輸出結果 //使用變數進行比較,輸出結果 System.out.println(a>b); System.out.println(a>=b); System.out.println(a==b); System.out.println(a!=b); System.out.println(a<b); System.out.println(a<=b); } }
結果為布林型別,TRUE或FALSE
面試題2:==與equals的區別
答:A、==通常作數值的相等關係比較;equals通常作引用型資料型別的相等比較
B、==比較的是變數的地址是否是同一個地址;equals比較的是變數指向的值是否相同
如下例:
package com.java12_25; //字元之前使用==和equals比較 public class GuanXi1 { public static void main(String[] args) { String c = "3"; String d = "3"; System.out.println("相同"=="相同");//字串直接比較,值相同,結果為TRUE System.out.println(3==3);//直接進行數值比較與下面變數之間比較做對比 System.out.println(c==d);//因為二者地址相同,所以結果為TRUE System.out.println(c.equals(d));//因equals比較的是二者的數值,所以結果為TRUE String a = new String("2"); String b = new String("2"); //宣告時更換地址 System.out.println(2==2);//直接進行數值比較與下面變數之間比較做對比 System.out.println(a==b);//因為因為二者地址不相同,儘管數值一樣,但結果為FALSE System.out.println(a.equals(b));//因equals比較的是二者的數值,與地址無關,所以結果為TRUE } }
結果為:
5、邏輯運算子:
&&:短路且,兩個運算元都為TRUE,整個結果為TRUE
||:短路或,兩個運算元有一個為TRUE,整個結果為TRUE
&:邏輯且,兩個運算元都為TRUE,整個結果為TRUE;不論左邊取值,右邊都會進行運算,並且可用於位運算
|:邏輯或,兩個運算元有一個為TRUE,整個結果為TRUE;不論左邊取值,右邊都會進行運算,並且可用於位運算
^:邏輯異或,兩個運算元相同,結果為FALSE;兩個運算元不同,結果為TURE
!:邏輯反(邏輯非),運算元為TRUE,結果為FALSE;運算元為FALSE,結果為TRUE
示例:
1)、&&短路且:左邊表達若為FALSE,則右邊不作運算;||短路或:只要有一個運算元為TRUE,結果TRUE,若左邊為TRUE,右邊不作運算
public class LuoJi { public static void main(String[] args) { int a = 11; int b = 12; System.out.println((++a==b)&&(++a!=b));//表示式左邊為TRUE,因此繼續執行右邊,右邊運算結果也為TRUE,結果輸出為TRUE System.out.println(a);//左右兩邊都有進行運算,a值為13 System.out.println("---------"); int c = 13; int d = 14; System.out.println((++c!=d)&&(++c==d));//表示式左邊運算結果為FALSE,右邊不作運算,直接輸出結果為FALSE System.out.println(c);//右邊不作運算,因些c值為14 System.out.println("---------"); int e = 15; int f = 16; System.out.println((++e==f)||(++e!=f));//表示式左邊為TRUE,右邊不作運算,只要左右兩邊有一個為TRUE,結果為TRUE System.out.println(e);//右邊不作運算,因些c值為16 } }
結果為:
2)、邏輯&和邏輯|
public class LuoJi1 { public static void main(String[] args) { int a = 11; int b = 12; System.out.println((++a==b)&(++a!=b));//表示式左、右邊運算結果為TRUE,結果輸出為TRUE System.out.println(a);//左右兩邊都會進行運算,a值為13 System.out.println("---------"); int c = 13; int d = 14; System.out.println((++c!=d)&(++c==d)); //表示式左邊運算結果為FALSE,右邊繼續作運算但不管運算結果為TRUE或FALSE,表示式結果都為FALSE System.out.println(c);//左右兩邊都會進行運算,因些c值為15 System.out.println("---------"); int e = 15; int f = 16; System.out.println((++e==f)|(++e!=f)); //表示式左邊為TRUE,右邊繼續運算,不管運算結果為TRUE或FALSE,只要左右兩邊有一個為TRUE,結果為TRUE System.out.println(e);//左右兩邊都會進行運算,因些c值為17 } }
結果為:
3)、邏輯異或:兩個運算元結果相同,結果為FALSE;兩個運算元結果不相同,結果為TRUE
public class LuoJi2 { public static void main(String[] args) { int a = 11; int b = 12; System.out.println(!(++a==b));//運算元運算結果為TRUE,非運算後最後結果為FALSE System.out.println(a);//a自加,結果為12 System.out.println("-----------"); int c = 13; int d = 14; System.out.println((a==b)^(++c==d));//左右兩個運算元運算結果相同,邏輯異或運算後結果為FALSE System.out.println(c);//c自加,結果為14 System.out.println((a==b)^(c!=d));//左右兩個運算元運算結果不相同,邏輯異或運算後結果為TRUE } }
結果為:
6、位運算子
1)、&:按位與:兩個運算元都為1,結果為1
2)、|:按位或:兩個運算元有一個為1,結果為1
面試題4:6&7=? 6|7=?
兩個數值的轉成二進位制數值進行每位的&或者|運算
6&7=6 6|7=7
110 110
&111 | 111
110 111
public class WeiSuan { public static void main(String[] args) { System.out.println(6&7); System.out.println(6|7); //換成二進位制進行運算,結果再換成十進位制輸出 } }
結果為:
3)、^:按位異或:兩個運算元相同,結果為0,不相同結果為1
11^12=7
1011
^1100
0111
public class WeiSuan1 { public static void main(String[] args) { System.out.println(11^12); //換成二進位制進行運算,結果轉成十制輸出 } }
結果為:
4)、~:按位非/取反:運算元為1,結果為0,運算元為0,結果為1 ////????
5)、<<:左移:右側空位補0
6)、>>:右移:左側空位補最高位,即符號位
7)、>>>:無符號右移:左側空位補0
示例:
面試題3:如何以最快的方式求出2的3次方?
System.out.println(2<<2);使用位運算子,將2往前移兩位;
public class WeiSuan3 { public static void main(String[] args) { //求2的3次方 System.out.println(2*2*2);//正常下操作,相乘輸出即可 System.out.println("--------"); System.out.println(2<<2);//換算成二進位制00000010,後向右移動2位,左側補0,結果為00001000,輸出十進位制為8 System.out.println("--------"); System.out.println(50>>3);//換算成二進位制00110010,後向右移動三位,左側補0,結果為110,輸出十進位制為6 System.out.println(50>>>3);//換算成二進位制00110010,後向右移動三位,左側補0,結果為110,輸出十進位制為6 } }
結果為:
面試題5:&和&&的區別
答:1、&表是邏輯且,無論第一個運算元是否為TRUE,第二個運算元都執行
&&表示短路且,第一個運算元為FALSE時後面的運算元不執行,返回FALSE
2、&還可以用作位運算,&&只能做邏輯運算
7、條件表示式:也三目表示式或三元表示式
條件?表示式1:表示式2
條件為TRUE,執行表示式1,反之執行表示式2
PS:如果要用一個變數接收表示式結果,表示式後面兩個結果型別要一樣
示例:
import java.util.Scanner; public class TiaoJian { public static void main(String[] args) { Scanner cxj = new Scanner(System.in); System.out.println("請輸入第一個數:"); int a = cxj.nextInt(); System.out.println("請輸入第二個數:"); int b = cxj.nextInt();; int c = a<b?a:b;//對鍵盤上輸入的兩個數值進行比較,若第一個數小於第二個數,則輸出第一個數,反之輸出第二個數 System.out.println(c); } }
執行示例結果:
作業:
1、銀行提供了整存整取定期儲蓄業務,其存期為一年、兩年、三年、五年到期憑存單支取本息。
年利率為一年:2.25%;
兩年:2.7%;
三年:3.24%;
五年:3.6%;
編寫一個程式,輸入存入的本金數目,計算假設存一年、兩年、三年或五年到期取款時銀行應支付的本息多少?(以課本結果為標準編寫)
import java.util.*; public class BenJin { public static void main(String[] args) { double benjin; System.out.println("請輸入本金:"); Scanner input = new Scanner(System.in); benjin = input.nextDouble(); System.out.println("本金是:"+benjin); //計算每年的利息加本金 double benxi1 = benjin + benjin*0.0225; System.out.println("第一年的本息是:"+benxi1); double benxi2 = benjin + benjin*0.027*2; System.out.println("第二年的本息是:"+benxi2); double benxi3 = benjin + benjin*0.0324*3; System.out.println("第三年的本息是:"+benxi3); double benxi5 = benjin + benjin*0.036*5; System.out.println("第五年的本息是:"+benxi5); } }
結果為:
預習:
流程控制--選擇結構與迴圈結構
1、流程控制結構:順序結構、選擇結構和迴圈結構
1)、順序結構:程式從上向下依次執行每條語句的結構;
2)、選擇結構:根據條件判斷的結果來選擇執行不同的程式碼;
有if控制語句和switch語句
3)、迴圈結構:根據判斷條件來重複性地執行某段程式碼;
有while語句、do-while語句、for語句
2、選擇結構有if控制語句和switch語句
1)、if控制語句有3種不同的形式,分別為單分支結構、雙分支結構和多分支結構
A、單分支結構:
if(表示式){
語句;
}
a、if為關鍵字;
b、表示式為布林型別的表示式,結果為true或false;
B、雙分支結構:
if(表示式){
語句1;
}else{
語句2;
}
執行步驟:
對錶達式進行判斷,結果為true,則執行語句1;反之執行語句2;
PS:else子句不能單獨使用,必須是IF語句的一部分,與最近的if語句配對使用;else後可再進行if語句,進行多分支選擇