1.運算符和表達式
運算符:
? 就是對常量或者變量進行操作的符號。
? 比如: + - * /
表達式:
? 用運算符把常量或者變量連接起來的,符合Java語法的式子就是表達式。
? 比如:a + b 這個整體就是表達式。
? 而其中+是算術運算符的一種,所以這個表達式也稱之為算術表達式。
2.算術運算符
分類:
+ - * / %
運算特點:
+ - * :跟小學數學中一模一樣沒有任何區(qū)別.
/:
1.整數相除結果只能得到整除,如果結果想要是小數,必須要有小數參數。
2.小數直接參與運算,得到的結果有可能是不精確的。
案例:
System.out.println( 10 / 3);//3
System.out.println(10.0 / 3);//3.3333333333333335
%:取模、取余。
他做的也是除法運算,只不過獲取的是余數而已。
案例:
System.out.println(10 % 2);//0
System.out.println(10 % 3);//1
應用場景:
//可以利用取模來判斷一個數是奇數還是偶數
System.out.println(15 % 2);//1 奇數
練習:數值拆分
需求:鍵盤錄入一個三位數,將其拆分為個位、十位、百位后,打印在控制臺
代碼示例:
//1.鍵盤錄入一個三位數
//導包 --- 創(chuàng)建對象 --- 接收數據
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個三位數");
int number = sc.nextInt();//123
//2.獲取這個三位數的個位、十位、百位并打印出來
//公式:
//針對于任意的一個數而言
//個位: 數字 % 10
int ones = number % 10;
//十位: 數字 / 10 % 10
int tens = number / 10 % 10;
//百位: 數字 / 100 % 10
int hundreds = number / 100 % 10;
//輸出結果
System.out.println(ones);
System.out.println(tens);
System.out.println(hundreds);
公式:
? 獲取任意一個數上每一位數。
個位:數字 % 10
十位:數字 / 10 % 10
百位:數字 / 100 % 10
千位:數字 / 1000 % 10
。。。以此類推。。。
3.隱式轉換
概念:
? 也叫自動類型提升。
? 就是把一個取值范圍小的數據或者變量,賦值給另一個取值范圍大的變量。此時不需要我們額外寫代碼單獨實現,是程序自動幫我們完成的。
簡單記憶:
? 就是小的給大的,可以直接給。
兩種提升規(guī)則:
- 取值范圍小的,和取值范圍大的進行運算,小的會先提升為大的,再進行運算。
- byte、short、char三種類型的數據在運算的時候,都會直接先提升為int,然后再進行運算。
取值范圍從小到大的關系:
? byte short int long float double
4.隱式轉換的練習
請看下面案例是否有誤,如果有問題,請說出原因,如果沒有問題,請說出運算過程和運算結果
案例一:
double d = 10;
System.out.println(d);//10.0
解釋:
? 10是整數,整數默認是int類型的。
? 而在取值范圍的順序中:byte short int long float double
? 在賦值的時候把一個int類型的賦值給了一個double類型的。把一個小的賦值給一個大的是可以直接給的。
案例二:
byte b = 100;
int i = b;//可以成功賦值
解釋:
? 因為byte的取值范圍是小的,int的取值范圍是大的,在底層進行了隱式轉換,不需要我們額外寫代碼單獨實現,是可以直接賦值。
案例三:
int i = 10;
long n = 20L;
??? result = i + n;
問變量result是什么類型的?
解釋:
? 變量i是int類型的,變量n是long類型的。
? 而在取值范圍的順序中:byte short int long float double
? 變量i里面的值會自動提升為long類型的,最終的結果其實就是兩個long相加,那么最終的result是long類型的。
案例四:
int i = 10;
long n = 100L;
double d = 20.0;
??? result = i + n + d;
問變量result是什么類型的?
解釋:
? 變量i是int類型,變量n是long類型,變量d是double類型。
? 而在取值范圍的順序中:byte short int long float double
? 所以變量i和變量n里面的值在參與運算的時候,都會進行類型提升,變成double。
? 最終其實就是三個double進行相加,那么最終的結果就是double類型的。
案例五:
byte b1 = 10;
byte b2 = 20;
??? result = b1 + b2;//int
問變量result是什么類型的?
解釋:
? 因為b1和b2都是byte類型的。所以在參與計算的時候,變量b1和變量b2里面的值都會自動提升為int類型的。最終其實就是兩個int類型的相加,最終結果也是int類型的。
案例六:
byte b = 10;
short s = 20;
long n = 100L;
??? result = b + s + n;
問變量result是什么類型的?long
解釋:
? 變量b是byte類型的,變量s是short類型的,變量n是long類型的。
? byte,short,char類型的變量在參與運算的時候,變量里面的值會直接先提升為int。
第一步:變量b和變量s里面的值會先提升為int參與運算。
? int + int + long
第二步:而long類型的取值范圍是大于int的取值范圍的。
? 所以變量b和變量s里面的值會再次提升為long。
? long + long + long。
所以最終結果是long類型的。
5.強制轉換
概念:
? 如果要把一個取值范圍大的數據或者變量賦值給另一個取值范圍小的變量。是不允許直接操作。
? 如果一定要這么干,就需要加入強制轉換。
書寫格式:
? 目標數據類型 變量名 = (目標數據類型)被強轉的數據;
簡單理解:
? 要轉成什么類型的,那么就在小括號中寫什么類型就可以了。
案例:
public class OperatorDemo2 {
public static void main(String[] args) {
double a = 12.3;
int b = (int) a;
System.out.println(b);//12
}
}
注意點:
? 強制轉換有可能會導致數據發(fā)生錯誤。(數據的精度丟失)
6.字符串的+操作
核心技巧:
- 當+操作中出現字符串時,此時就是字符串的連接符,會將前后的數據進行拼接,并產生一個新的字符串。
- 當連續(xù)進行+操作時,從左到右逐個執(zhí)行的。
7.字符串相加的練習:
案例1:
1 + "abc" + 1
結果:“1abc1”
解釋:
? 第一步: 1 + “abc”。在這個過程中,有字符串參與的,所以做的是拼接操作,產生一個新的字符串"1abc"
? 第二步: “1abc” + 1。這個過程中,有字符串參與的,所以做的也是拼接操作,產生一個新的字符串"1abc1"
案例2:
1 + 2 + "abc" + 2 + 1
結果:“3abc21”
解釋:
? 第一步:1 + 2 。在這個過程中,沒有字符串參與的,所以做的是加法運算,結果為3。
? 第二步:3 + “abc”。在這個過程中,有字符串參與的,所以做的是拼接操作,產生一個新的字符串"3abc"。
? 第三步:“3abc” + 2。在這個過程中,有字符串參與的,所以做的是拼接操作,產生一個新的字符串"3abc2"。
? 第四步:“3abc2” + 1。在這個過程中,有字符串參與的,所以做的是拼接操作,產生一個新的字符串“3abc21”
案例3:
String name = "黑默丁格";
System.out.println("我的名字是" + name);
結果: 我的名字是黑默丁格
解釋:當字符串跟變量相加的時候,實際上是跟變量里面的值進行拼接。
8.字符的+操作
規(guī)則:
? 當+操作中出現了字符,會拿著字符到計算機內置的ASCII碼表中去查對應的數字,然后再進行計算。
案例:
char c = 'a';
int result = c + 0;
System.out.println(result);//97
ASCII碼表中:
? ‘a’ ----- 97
? ‘A’ ----- 65
9.算術運算符的總結
分類:
+ - * / % 這些操作跟小學數學幾乎是一模一樣的。
注意點:
- / 和 % 的區(qū)別:他們兩個都是做除法運算,/取結果的商。% 取結果的余數。
- 整數操作只能得到整數,如果想要得到小數,必須有浮點數參與運算。
算術運算符的高級用法:
是以+為例進行的講解,其余減法,乘法,除法的運算規(guī)則也是一樣的。
特例:字符串只有+操作,沒有其他操作。
10.自增自減運算符
分類:
++ 自增運算符
-- 自減運算符
++:就是把變量里面的值+1
–:就是把變量里面的值-1
使用方式:
- 放在變量的前面,我們叫做先++。 比如:++a
- 放在變量的后面,我們叫做后++。 比如:a++
注意點:
? 不管是先++,還是后++。單獨寫在一行的時候,運算結果是一模一樣的。
案例:
//++
int a = 10;
a++;//就是讓變量a里面的值 + 1
System.out.println(a);//11
++a;//就是讓變量a里面的值 + 1
System.out.println(a);//12
自增自減運算符的應用場景:
某些情況下,變量需要進行加1或者減1的時候使用。
比如:過生日多一歲,就用到了自增運算符。
比如:購物商場中,選擇商品數量,也用到了自增或者自減運算符。
比如:統計很多數據中,有多少個數據滿足要求,也用到了自增運算符。
11.賦值運算符
最為常用的: =
運算過程:就是把等號右邊的結果賦值給左邊的變量
案例:
public class OperatorDemo6 {
public static void main(String[] args) {
//1.最為簡單的賦值運算符用法
int a = 10;//就是把10賦值給變量a
System.out.println(a);
//2.如果等號右邊需要進行計算。
int b = 20;
int c = a + b;//先計算等號右邊的,把計算的結果賦值給左邊的變量
System.out.println(c);
//3.特殊的用法
a = a + 10;//先計算等號右邊的,把計算的結果賦值給左邊的變量
System.out.println(a);//20
}
}
12.擴展賦值運算符
分類:
? +=、-=、*=、/=、%=
運算規(guī)則:
? 就是把左邊跟右邊進行運算,把最終的結果賦值給左邊,對右邊沒有任何影響。
案例:
public class OperatorDemo7 {
public static void main(String[] args) {
//擴展賦值運算符
int a = 10;
int b = 20;
a += b;//把左邊和右邊相加,再把最終的結果賦值給左邊,對右邊沒有任何影響
// 相當于 a = a + b;
System.out.println(a);//30
System.out.println(b);//20
}
}
注意點:
? 擴展的賦值運算符中隱層還包含了一個強制轉換。
以+=為例。
a += b ;實際上相當于 a = (byte)(a + b);
public class OperatorDemo8 {
public static void main(String[] args) {
byte a = 10;
byte b = 20;
//a += b;
a = (byte)(a + b);
System.out.println(a);//30
}
}
13.關系運算符
又叫比較運算符,其實就是拿著左邊跟右邊進行了判斷而已。
分類:
符號 | 解釋 |
---|---|
== | 就是判斷左邊跟右邊是否相等,如果成立就是true,如果不成立就是false |
!= | 就是判斷左邊跟右邊是否不相等,如果成立就是true,如果不成立就是false |
> | 就是判斷左邊是否大于右邊,如果成立就是true,如果不成立就是false |
>= | 就是判斷左邊是否大于等于右邊,如果成立就是true,如果不成立就是false |
< | 就是判斷左邊是否小于右邊,如果成立就是true,如果不成立就是false |
<= | 就是判斷左邊是否小于等于右邊,如果成立就是true,如果不成立就是false |
注意點:
- 關系運算符最終的結果一定是布爾類型的。要么是true,要么是false
- 在寫==的時候,千萬不要寫成=
14.邏輯運算符
& 和 | 的使用:
&:邏輯與(而且)
? 兩邊都為真,結果才是真,只要有一個為假,那么結果就是假。
|:邏輯或(或者)
? 兩邊都為假,結果才是假,只要有一個為真,那么結果就是真。
代碼示例:
// & //兩邊都是真,結果才是真。
System.out.println(true & true);//true
System.out.println(false & false);//false
System.out.println(true & false);//false
System.out.println(false & true);//false
System.out.println("===================================");
// | 或 //兩邊都是假,結果才是假,如果有一個為真,那么結果就是真。
System.out.println(true | true);//true
System.out.println(false | false);//false
System.out.println(true | false);//true
System.out.println(false | true);//true
使用場景:
? 根據固定的場景,來選擇使用&還是使用|
-
用戶登錄。
用戶名輸入正確 & 密碼輸入正確
因為只有用戶名和密碼同時都正確了,那么才能成功登錄,只要有一個失敗了都不行。
使用技巧:
? 當我們需要同時滿足左邊和右邊兩種情況時,可以使用且
-
丈母娘選女婿
丈母娘:女婿啊,你要么買個房子,要么買輛車。就可以把我的小棉襖穿走了。
買個房子 | 買輛車
兩個條件中,只要滿足其中一個,就可以穿走小棉襖了。
使用技巧:
? 當兩種條件只要滿足其中一個的時候,可以使用或
^(異或)的使用:
? 在以后用的不多,了解一下即可。
計算規(guī)則:如果兩邊相同,結果為false,如果兩邊不同,結果為true
代碼示例:
//^ //左右不相同,結果才是true,左右相同結果就是false
System.out.println(true ^ true);//false
System.out.println(false ^ false);//false
System.out.println(true ^ false);//true
System.out.println(false ^ true);//true
!(取反)的使用:
? 是取反,也叫做非。
計算規(guī)則:false取反就是true,true取反就是false
溫馨提示:取反最多只用一個。
代碼示例:
System.out.println(!false);//true
System.out.println(!true);//false
System.out.println(!!false);//注意點:取反最多只用一個。
15.短路邏輯運算符
分類: && ||
&&:
? 運算結果跟&是一模一樣的,只不過具有短路效果。
||:
? 運算結果跟|是一模一樣的。只不過具有短路效果。
邏輯核心:
? 當左邊不能確定整個表達式的結果,右邊才會執(zhí)行。
? 當左邊能確定整個表達式的結果,那么右邊就不會執(zhí)行了。從而提高了代碼的運行效率。
舉例:
-
用戶登錄案例
用戶名正確 & 密碼正確
如果使用一個&,不管用戶名是否正確都會去驗證密碼。
思考:
? 如果用戶名輸入正確了,那么我們再判斷密碼是否正確,是符合業(yè)務邏輯的。
? 但是如果用戶名輸入錯誤了,那么現在還有必要去比較密碼嗎?沒有不要了。
? 如果使用一個&,那么左邊和右邊不管什么情況下,都會執(zhí)行。
? 用戶名正確 && 密碼正確
? 如果用戶名輸入正確了,那么才會驗證密碼是否輸入正確。
? 如果用戶名輸入錯誤了,那么就不會再去驗證密碼是否正確,最終的結果直接為false。從而提高了程序運行的效率。
-
丈母娘選女婿
有房 | 有車
首先先看看有沒有房,發(fā)現有,然后再去看看有沒有車。
思考:
? 既然都有房子,干嘛還要去看車呢?多此一舉。
? 有房 || 有車
? 首先先看看有沒有房,如果有,那么右邊就不執(zhí)行了。最終的結果直接為true。
? 如果沒有房子,才會去看右邊有沒有車。
總結:
&& 和 & 、||和|的運行結果都是一模一樣的。
? 但是短路邏輯運算符可以提高程序的運行效率。
建議:
? 最為常用: && || !
16.三元運算符
又叫做:三元表達式或者問號冒號表達式。
格式:
? 關系表達式 ? 表達式1 :表達式2 ;
計算規(guī)則:
- 計算關系表達式的值。
- 如果關系表達式的值為真,那么執(zhí)行表達式1。
- 如果關系表達式的值為假,那么執(zhí)行表達式2。
注意點:
? 三元運算符的最終結果一定要被使用,要么賦值給一個變量,要么直接打印出來。
案例:
public class OperatorDemo12 {
public static void main(String[] args) {
//需求:求兩個數的較大值
int a = 10;
int b = 20;
//格式:關系表達式 ? 表達式1 : 表達式2 ;
//注意點:
//三元運算符的最終結果一定要被使用。
//要么賦值給一個變量,要么直接輸出。
int max = a > b ? a : b ;
System.out.println(max);
System.out.println(a > b ? a : b);
}
}
17.練習1-兩只老虎
需求:
? 動物園里有兩只老虎,兩只老虎的體重分別為通過鍵盤錄入獲得,
? 請用程序實現判斷兩只老虎的體重是否相同。
代碼示例:
//1.獲取兩只老虎的體重
Scanner sc = new Scanner(System.in);
System.out.println("請輸入第一只老虎的體重");
int weight1 = sc.nextInt();
System.out.println("請輸入第二只老虎的體重");
int weight2 = sc.nextInt();
//2.利用三元運算符求出最終結果
String result = weight1 == weight2 ? "相同" : "不相同";
System.out.println(result);
18.練習2-求三個數的最大值
需求:
? 一座寺廟里住著三個和尚,已知他們的身高分別為150cm、210cm、165cm。
? 請用程序實現獲取這三個和尚的最高身高。
代碼示例:
//1.定義三個變量記錄和尚的身高
int height1 = 150;
int height2 = 210;
int height3 = 165;
//2.利用三元運算符求出兩個數中的較大值。
int temp = height1 > height2 ? height1 : height2;
//3.求出最終的結果
int max = temp > height3 ? temp : height3;
System.out.println(max);
19.運算符的優(yōu)先級
在Java中涉及了很多的運算符,每一種運算符都有各自的優(yōu)先級。但是這些優(yōu)先級不需要記憶。
咱們只要知道其中一點:
? 小括號優(yōu)先于所有。文章來源:http://www.zghlxwxcb.cn/news/detail-614202.html
后記
????????美好的一天,到此結束,下次繼續(xù)努力!欲知后續(xù),請看下回分解,寫作不易,感謝大家的支持??! ??????文章來源地址http://www.zghlxwxcb.cn/news/detail-614202.html
到了這里,關于從零開始學習 Java:簡單易懂的入門指南(三)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!