運算符 運算符介紹 算數運算符 運算符 運算 範例 結果 + 正號 +7 7 - 負號 b=11; -b -11 + 加 9+9 18 - 減 10-8 2 * 乘 7*8 56 除 9/9 1 % 取模(取餘) 11%9 2 ++ 自增(前):先運算後取值自增(後):先取值後運算 a=2;b=a; ...
運算符
運算符介紹
算數運算符
運算符 | 運算 | 範例 | 結果 |
---|---|---|---|
+ | 正號 | +7 | 7 |
- | 負號 | b=11; -b | -11 |
+ | 加 | 9+9 | 18 |
- | 減 | 10-8 | 2 |
* | 乘 | 7*8 | 56 |
除 | 9/9 | 1 | |
% | 取模(取餘) | 11%9 | 2 |
++ | 自增(前):先運算後取值 自增(後):先取值後運算 |
a=2;b=++a; a=2;b=a++; |
a=3;b=3 a=3;b=2 |
-- | 自減(前):先運算後取值 自減(後):先取值後運算 |
a=2;b=--a a=2;b=a-- |
a=1;b=1 a=1;b=2 |
+ | 字元串相加 | "hsp" +"edu" | "hspedu" |
**
*演示算術運算符的使用
*/
public class ArithmeticOperator {
//編寫一個main方法
public static void main(String[] args) {
///使用
System.out.print1n(10 / 4);//從數學來看是2.5,java中 2
System.out.println(10.0 / 4);//java是2.5
//註釋快捷鍵ctrl +/,再次輸入ctrl +/取消註釋
//double d = 10 / 4;
//System.out.println(d);
//註釋快捷鍵ctrl +/,再次輸入ctrl +/取消註釋
double d = 10/4;//java中10/ 4 = 2,2=>2.0
System.out.println(d);//是2.0
//%取模,取餘
//在%的本質看一個公式a % b = a - a/ b * b
//-10 %3 =>-10 -(-10)/3 * 3 = -10 + 9= -1
// 10 %-3 = 10 - 10/(-3)*(-3) = 10 - 9 = 1
// -10 % -3=(-10) - (-10)/ (-3)*(-3)= -10 +9 = -1
System.out.print1n(10 % 3);//1
System.out.println( -10 %3);// -1
System.out.println(10 % -3);// 1
System.out.println( -10%-3);//-1
//++的使用
//
int i = 10;
i++;//自增等價於i = i + 1;=>i = 11
++i;//自增等價於i = i + 1;=> i = 12
System.out.println( "i=" + i);//12
/*
作為表達式使用
前++∶++i先自增後賦值
後++∶ i++先賦值後自增
*/
int j = 8;
int k = ++j;//等價j=j+1;k=j;
int k = j++;//等價k =j;j=j+1;
System.out.println("k="+k+“j="+j);
}
}
面試題
1.面試題1
int i=1;
i=i++; //規則使用臨時變數:(1) temp=i;(2) i=i+1;(3)i=temp;
System.out.println(i);
問:結果是多少?為什麼?
2.面試題2
int i=1;
i=++i; //(1) i=i+1;(2) temp=i;(3)i=temp;
System.out.println(0);
答案:
1
2
練習題
//自增,自減練習
int i1 = 10;
int i2 =20;
int i= i1++;
System.out.print("i="+i); //10
System.out.println("i2="+i2); //20
i = --i2;
System.out.print("i="+i); //19
System.out.println("i2="+i2); //19
練習題2
-
假如還有59天放假,問:合xx個星期零xx天
int i=59; System.out.println(59/7+"星期零"+59%7+"天");
-
定義一個變數保存華氏溫度,華氏溫度轉換攝氏溫度的公式為:5/9*(華氏
溫度-100),請求出華氏溫度對應的攝氏溫度。[234.5]double i=234.5; double x; x=(i-100)*5/9; System.out.println(x);
關係運算符
-
關係運算符的結果都是boolean型,也就是要麼是true,要麼是false
-
關係表達式經常用在if結構的條件電或迴圈結構的條件中
關係運算符一覽
運算符 | 運算 | 範例 | 結果 |
---|---|---|---|
== | 相等於 | 8==7 | false |
!= | 不等於 | 8!=7 | true |
< | 小於 | 8<7 | false |
> | 大於 | 8>7 | true |
<= | 小於等於 | 8<=7 | false |
>= | 大於等於 | 8>=7 | true |
instanceof | 檢查是否是類的對象 | "hsp" instanceof String | true |
int a = 9;//老韓提示:開發中,不可以使用a, b
int b = 8;
System.out.println(a>b);//T
System.out.println(a>=b);//T
System.out.println(a<=b);//F
System.out.println(a<b);//F
System.out.println(a==b);//F
System.out.println(a!=b);//T
boolean flag = a>b;//T
System.out.println("flag="+flag);
細節說明
- 關係運算符的結果都是boolean型,也就是要麼是true,要麼是false.
- 關係運算符組成的表達式,我們稱為關係表達式。a >b
- 比較運算符"==“不能誤寫成"="
邏輯運算符
介紹
用於連接多個條件(多個關係表達式),最終的結果也是一個boolean值。
邏輯運算符一覽
分為兩組學習
-
短路與&&,短路或||,取反!
-
邏輯與&,邏輯或|,^邏輯異或
a | b | a&b | a&&b | a|b | a||b | !a | a^b |
---|---|---|---|---|---|---|---|
true | true | true | true | true | true | false | false |
true | false | false | false | true | true | false | true |
false | true | false | false | true | true | true | true |
false | false | false | false | false | false | true | false |
&&和&基本規則
名稱 | 語法 | 特點 |
---|---|---|
短路與&& | 條件1&&條件2 | 兩個條件都為true,結果為true |
邏輯與& | 條件1&條件2 | 兩個條件都為true,結果為true |
&&和&案例演示
//&&短路與和&案例演示
int age = 50;
if(age > 20 8&& age < 90) {
System.out.println("ok100");
}
//&邏輯與使用
if(age > 20 & age < 90){
System.out.println("ok200");
}
//&邏輯與使用
if(age > 20 & age < 90){
System.out.println( "ok200");
}
//區別
int a = 4;
int b = 9;
//對於&&短路與而言,如果第一個條件為false ,後面的條件不再判斷
if(a < 1 && ++b <50){
System.out.println("ok300");
}
System.out.println( "a=" +a + " b=" + b);// 4 9
//對於&邏輯與而言,如果第一個條件為false ,後面的條件仍然會判斷
if(a < 1 & ++b <50){
System.out.println("ok300");
}
System.out.println( "a=" +a + " b=" + b);// 4 9
&&和&使用區別
- &&短路與:如果第一個條件為false,則第二個條件不會判斷,最終結果為false,效率高
- &邏輯與:不管第一個條件是否為false,第二個條件都要判斷,效率低3.開發中,我們使用的基本是短路與&&,效率高
||和|基本規則
名稱 | 語法 | 特點 |
---|---|---|
短路或|| | 條件1||條件2 | 兩個條件中只要有一個成立,結果為true |
邏輯或| | 條件1|條件2 | 只要有一個條件成立,結果為true |
||和|案例演示
int a = 4;int b = 9;
if( a > 1 | ++b >4){
System.out.println( "ok300");
}
System.out.print1n( "a=" + a + " b=" + b); //4 10
||和|使用區別
- ||短路或:如果第一個條件為true,則第二個條件不會判斷,最終結果為true,效率高
- |邏輯或:不管第一個條件是否為true,第二個條件都要判斷,效率低
- 開發中,我們基本使用||
!取反 基本規則名稱
名稱 | 語法 | 特點 |
---|---|---|
!非(取反) | !條件 | 如果條件本身成立,結果為false,否則為true |
!案例演示
//!操作是取反 T->F,F ->T
System.out.println(60 >20);//T
System.out.println(!(60 >20));/ /F
//a^b:叫邏輯異或,當a和b 不同時,則結果為true,否則為false
boolean b = (10 >1)^(3 > 5);
System.out.println( "b=" + b);//T
^案例演示
a^b:叫邏輯異或,當a和b 不同時,則結果為true,否則為false
^邏輯異或,System.out.printIn( (4<1)^(6> 3));//?
練習題
//1
int x = 5;
int y=5;
if(x++==6 & ++y==6){//邏輯與
x= 11;
}
System.out.println("x="+x+",y="+y);//6 6
//2
int x= 5,y= 5;
if(x++==6 && ++y==6){
x= 11;
}
System.out.println("x="+x+",y="+y);//6 5
//3
int x = 5,y = 5;
if(x++==5 | ++y==5){
x =11;
}
System.out.println("x="+x+",y="+y);//11 6
//4
int x = 5,y = 5;
if(x++==5||++y==5){
x =11;
}
System.out.println("x="+x+",y="+y);//11 5
賦值運算符
介紹
賦值運算符就是將某個運算後的值,賦給指定的變數。
賦值運算符的分類
基本賦值運算符 =
複合賦值運算符
+=, -=,*=, /=,%=等,重點講解一個 +=,其它的使用是一個道理
a+= b;[等價a=a+b;]
a -=b;[等價a=a-b;]
案例演示
int n1 = 10;
n1 += 4;// n1 = n1 +4;
System.out.println(n1); // 14
n1 /= 3;// n1 = n1/ 3;//4
System.out. println(n1); // 4
- 賦值基本案例[int num1 = 10]
- +=的使用案例
賦值運算符特點
- 運算順序從右往左int num = a +b +c;
- 賦值運算符的左邊只能是變數,右邊可以是變數、表達式、常量值
int num = 20; int num2= 78*34 - 10; int num3 = a; - 複合賦值運算符等價於下麵的效果
比如:a+=3;等價於a=a+3; - 複合賦值運算符會進行類型轉換。
byte b = 2; b+=3; b++;
int n1 = 10;
n1 += 4;// n1 = n1 +4;
System.out.println(n1);// 14
n1 /= 3; // n1 = n1 / 3;//4
System. out.print1n(n1);// 4
//複合賦值運算符會進行類型轉換
byte b = 3;
b += 2;//等價b = (byte)(b+2);
b++;// b = (byte)(b+1);
三元運算符
基本語法
條件表達式?表達式1:表達式2;
-
如果條件表達式為true,運算後的結果是表達式1;
-
如果條件表達式為false,運算後的結果是表達式2;
●案例演示
int a= 10;
int b = 99;
int result =a<b ? a++:b--;
System.out.println ( "result=" + result);
System.out.println("a=" + a);//11
System.out.print1n( "b=" + b);//99
使用細節
-
表達式1和表達式2需要為可以賦給接收變數的類型(或可以自動轉換)
-
三元運算符可以轉成if--else語句
int res = a >b ? a++:--b;
運算符優先順序
- 運算符有不同的優先順序,所謂優先順序就是表達式運算中的運算順序。如右表,上一行運算符總優先於下一行。
- 只有單目運算符、賦值運算符是從右向左運算的。
1 | 括弧 | ()、[ ]、. |
---|---|---|
2 | 非、正,負號 | !、+(正)、-(負) |
3 | 自增,自減 | ++、-- |
4 | 乘,除,取餘 | *、/、% |
5 | 加,減 | +、- |
6 | 移位運算 | <<、>>、>>> |
7 | 大小關係 | <、<=、>、>= |
8 | 相等關係 | ==、!= |
9 | 按位與 | & |
10 | 按位異或(在java中,這不是冪次方的符號) | ^ |
11 | 按位或 | | |
12 | 邏輯與(短路與) | && |
13 | 邏輯或(短路或) | || |
14 | 條件運算(三目運算) | ? : |
15 | 賦值運算 | =、+=、-=、*=、/=、%= |
16 | 位賦值運算 | &=、|=、^=、~=、<<=、>>=、>>>= |
標識符的命名規則和規範
標識符概念
- Java 對各種變數、方法和類等命名時使用的字元序列稱為標識符
- 凡是自己可以起名字的地方都叫標識符int num1 I= 90;
標識符的命名規則(必須遵守)
- 由26個英文字母大小寫,0-9,或$組成
- 數字不可以開頭。int 3ab = 1;//錯誤
- 不可以使用關鍵字和保留字,但能包含關鍵字和保留字(l例如:aclasss)
- Java中嚴格區分大小寫,長度無限制。int totalNum = 10; int n = 90;
- 標識符不能包含空格。int a b = 90;
判斷下麵變數名是否正確
hsp //T
hsp12 //T
1hsp //F
h-s //F
x h //F
h$4 //T
class //F
int //F
double //F
public //F
static //F
goto //F
stu_name //F
標識符命名規範[更加專業]
- 包名:多單片語成時所有字母都小寫: aaa.bbb.ccc//比如com.hsp.crm
- 類名、介面名:多單片語成時,所有單詞的首字母大寫:XxxYyyZzz【大駝峰】
比如:TankShotGame - 變數名、方法名:多單片語成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫:xxxYyyZzz【小駝峰】
比如:tankShotGame - 常量名:所有字母都大寫。多單詞時每個單詞用下劃線連接:XXX_YYY_ZZZ
比如:定義一個所得稅率TAX_RATE - 後面我們學習到類,包,介面,等時,我們的命名規範要這樣遵守,更加詳細的看文檔。
鍵盤輸入語句
介紹
在編程中,需要接收用戶輸入的數據,就可以使用鍵盤輸入語句來獲取。
需要一個掃描器((對象),就是 Scanner
●步驟:
- 導入該類的所在包,java.util.*
- 創建該類對象(聲明變數)
- 調用裡面的功能
●案例演示:
要求:可以從控制台接收用戶信息,【姓名,年齡,薪水】。
import java.util.Scanner;//表示把java.util下的Scanner類導人
public class Input{
//編寫一個main方法
public static void main(Stringl]args){
//演示接受用戶的輸入//步驟
//Scanner類表示簡單文本掃描器,在java.util包
//1.引入/導入Scanner類所在的包
//2.創建Scanner 對象, new創建一個對象,體會
//myScanner就是Scanner類的對象
Scanner myScanner = new Scanner(System.in);
//3.接收用戶輸入了,使用相關的方法
System.out.print1n("請輸入名字");
//當程式執行到 next方法時,會等待用戶輸入~~~
String name = myScanner.next();//接收用戶輸入字元串System.out.println("請輸入年齡");
int age = myScanner.nextInt();//接收用戶輸入intSystem.out.println("請輸入薪水");
double sal = myScanner.nextDouble();//接收用戶輸入doubleSystem.out.println("人的信息如下:");
System.out.println("名字"+name+“年齡=”+age +“薪水=” +sal);
}
}
進位
進位介紹
對於整數,有四種表示方式:
- 二進位:0,1,滿2進1.以Ob或0B開頭。
- 十進位:0-9,滿10進1。
- 八進位:0-7,滿8進1。以數字0開頭表示。
- 十六進位:0-9及A(10)-F(15),滿16進1.以0x或0X開頭表示。此處的A-F不區分大小寫。
舉例說明
int n1 = 0b1010;
int n2 =1010;
int n3 = 01010;
int n4 = 0x10101;
System.out.println("n1=" + n1);
System.out.println("n2=" + n2);
System.out.print1n("n3=" + n3);
System.out.println("n4=" + n4);
進位的轉換(基本功)
進位轉換的介紹
第一組:
-
二進位轉十進位
0b1011=1*20+1*21+0*22+1*23=11
-
八進位轉十進位
0234=4*80+3*81+2*82=4+24+128=156
-
十六進位轉十進位
0x23A=10*160+3*161+2*162=10+48+512=570
第二組:
-
十進位轉二進位
34/2=17...............0
17/2=8.................1
8/2=4....................0
4/2=2....................0
2/2=1....................00b100010
-
十進位轉八進位
131/8=16..............3
16/8=2...................00203
-
十進位轉十六進位
237/16=14...............13------->D
14-------->E0XED
第三組
-
二進位轉八進位
0b11010101=>11(3) 010(2) 101(5)=>0325
-
二進位轉十六進位
0b11010101=>1101(D) 0101(5)=0xD5
第四組
-
八進位轉二進位
0x0237=2(010)3(011)7(111)=0b10011111
-
十六進位轉二進位
0x23B=2(0010)3(0011)B(1011)=0B1000111011
二進位在運算中的說明
-
二進位是逢2進位的進位制,0、1是基本算符。
-
現代的電子電腦技術全部採用的是二進位,因為它只使用0、1兩個數字元號,非常簡單方便,易於用電子方式實現。電腦內部處理的信息,都是採用二進位數來表示的。 二進位(Binary) 數用0和1兩個數字及其組合來表示任何數。進位規則是"逢2進1",數字1在不同的位上代表不同的值,按從右至左的次序,這個值以二倍遞增。
原碼、反碼、補碼(重點難點)
網上對原碼,反碼,補碼的解釋過於複雜,我這裡精簡幾句話:對於有符號的而言:
-
二進位的最高位是符號位:0表示正數, 1表示負數(口訣: 0->0 1-> -)
-
正數的原碼,反碼,補碼都一樣(三碼合一)
-
負數的反碼=它的原碼符號位不變,其它位取反(0->1,1->0)
-
負數的補碼=它的反碼+1,負數的反碼=負數的補碼-1
-
0的反碼,補碼都是0
-
java沒有無符號數,換言之, java中的數都是有符號的
-
在電腦運算的時候,都是以補碼的方式來運算的.
-
當我們看運算結果的時候,要看他的原碼
位運算
java中有7個位運算(&、|、^、~、>>.<<和>>>)
√分別是按位與&、按位或|、按位異或^,按位取反~,它們的運算規則是:
按位與&:兩位全為1,結果為1,否則為0
按位或|:兩位有一個為1,結果為1,否則為0
按位異或^:兩位一個為0,一個為1,結果為1,否則為0
按位取反~:0->1,1->0 (在代碼中~是對補碼進行操作)
比如: 2&3=? ~-2 =? ~2=? 2|3=? 2^3=?
√完成前面的案例!
●還有3個位運算符>>、<<和>>>,運算規則:
- 算術右移>>:低位溢出,符號位不變,並用符號位補溢出的高位
- 算術左移<<;符號位不變,低位補0
- >>>邏輯右移也叫無符號右移,運算規則是:低位溢出,高位補0
- 特別說明:沒有<<<符號
●應用案例
int a=1>>2;//1=>000000|01=>本質1/2/2=0
int c=1<<2;//1=>0000001|00=>本質1*2*2=4
●完成前面的案例
建議:講解的即可,不用再深入。
本章習題
-
計算下列表達式的結果
10/3= 3 ; 10/5 = 2 ; 10%2=0 ; -10.5%3 = ?;
解析:
//a % b當a是小數時,公式=a - (int)a / b * b
//-10.5%3 = -10.5 -(-10)/3 * 3 = -10.5 +9 = -1.5
//註意:有小數運算,得到結果是近似值 -
試說出下麵代碼的結果
int i=66;
System.out.println(++i+i);//執行i=i+1=>i=67 =>134 -
在Java中,以下賦值語句正確的是(C D)。
A) int num1=(int)"18"; //錯誤應該Integer.parselnt("18");
B) int num2=18.0; //錯誤double,-> int
C) double num3=3d; //ok
D)double num4=8; //ok int -> double
E) int i=48; char ch = i+1; //錯誤int ->char
F) byte b = 19; short s = b+2; //錯誤int ->short
4.試寫出將String轉換成double類型的語句,以及將char類型轉換成String的語句,舉例說明即可,寫簡單代碼
String str = "18.8";1/註意字元串要可以被轉成double
double d1 = Double.parseDouble(str);
char c1 ='韓";
String str2 = c1+ "";