-
運算符
對常量和變量進(jìn)行操作的符號稱為運算符 -
表達(dá)式
用運算符把常量或者變量連接起來符號的java語法的式子就可以稱為表達(dá)式。
不同運算符連接的式子體現(xiàn)的是不同類型的表達(dá)式。 -
常用運算符
算術(shù)運算符、賦值運算符、關(guān)系運算符(比較運算)、邏輯運算符和三元運算符。
算數(shù)運算符(掌握)
算數(shù)運算符概述
算術(shù)運算:和數(shù)學(xué)中的算術(shù)運算基本一致。
運算符號: + - *(×) /(÷) % (算余數(shù) 模運算) ++(自增) --(自減)
算術(shù)運算規(guī)則:
- 在Java中進(jìn)行算術(shù)運算的時候,運算符兩側(cè)的類型一致的時候,運算的結(jié)果必須和運算的數(shù)據(jù)類型保持一致。
int d = 4321 / 1000* 1000;
4321 是int類型數(shù)據(jù)
1000 是int類型數(shù)據(jù)
他們的商 必須是int類型
故4321 /1000 結(jié)果是 4 不是4.321
- 當(dāng)算術(shù)運算兩側(cè)的類型不一致的時候,結(jié)果向大的類型保持。
double d = 4321 / 1000.0* 1000;
4321 是int類型數(shù)據(jù)
1000.0 是double類型數(shù)據(jù)
他們的商 保持大類型double
故4321 /1000.0 不是4.321
public class ArithmeticOperator {
public static void main(String[] args) {
// 定義兩個變量
int a = 3;
int b = 4;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b);
System.out.println(4321 / 1000 * 1000);//4000
System.out.println(4321 / 1000.0 * 1000);//4321.0
}
}
算數(shù)運算符取余和除法的區(qū)別
%:取余運算符。得到的是兩個相除數(shù)據(jù)的余數(shù)。
10 % 4 = 2
4 % 10 = 4
20 % 3 = 2
/: 除法運算符,得到是兩個相除數(shù)據(jù)的商。
拓展:任何一個正整數(shù),模(%)2,結(jié)果要么是零, 要么是1。故我們經(jīng)常通過將一個數(shù)對2取模以確定被除數(shù)的奇偶性。
字符和字符串參與加法操作
字符與+運算:
其實是拿該字符對應(yīng)的數(shù)值來操作
‘a(chǎn)’ 97
‘A’ 65
‘0’ 48
字符串與+運算:
在Java中如果讓字符串和+進(jìn)行運算,這時這個+號變成連接符,它會把當(dāng)前這個字符串和+號后面的內(nèi)容連接成一個更長的字符串。
/*
* 1整數(shù)的加法。
* 字符參與加法操作。拿字符在計算機中底層存儲對應(yīng)的數(shù)據(jù)值來參與運算的。
* '0' 48
* 'a' 97
* 'A' 65
* 字符串參與加法操作。
* 這里的+其實不是加法,而是字符串連接符。
*/
public class CharAdd {
public static void main(String[] args) {
// 整數(shù)加法
int a = 10;
int b = 20;
System.out.println(a + b);
System.out.println("------------------");
// 字符參與加法操作
char c = '0';
char c2 = 'a';
System.out.println(a + c);//58
System.out.println(a + c2);//107
System.out.println("------------------");
// 字符串參與加法操作
System.out.println("hello" + a);
// "hello"+10,然后再和b進(jìn)行拼接
System.out.println("hello" + a + b);//hello1020
//30hello
System.out.println(a + b + "hello");
}
}
算數(shù)運算符++和- - 的用法
++(自加,自增),--(自減)運算符:對變量做加1或者減1的操作。
++或者--既可以放在變量的后面,也可以放在變量的前面。
表現(xiàn)形式:
++或者--在變量的右側(cè),舉例:i++,j--;
++或者--在變量的左側(cè),舉例:++i,--j;
單獨使用的時候:
++或者--無論是放在變量的前面還是后面,結(jié)果是一樣的。
參與操作的時候:
如果++或者--在變量的后面(右側(cè)),先拿變量參與操作,后變量做++或者--;
如果++或者--在變量的前面(左側(cè)),先變量做++或者--,后拿變量參與操作;
public class SelfOperation {
public static void main(String[] args) {
int a = 10;
System.out.println("a:" + a);//a:10
// 單獨使用
a++;
++a;
System.out.println("a:" + a);//a:11
// 參與操作使用
int b = a++;//a:11 b:10
int b = ++a;//a:11 b:11
System.out.println("a:" + a);
System.out.println("b:" + b);
}
}
賦值運算符
賦值運算符分類
基本的賦值運算符:=
混合的賦值運算符:+=,-=,*=,/=,%=
如:
+=: a+=20;相當(dāng)于a = (a的數(shù)據(jù)類型)(a + 20);
/*
* 賦值運算符:
* A:基本 =
* B:混合 +=,-=,*=,...
*
* +=:
* a+=20;
* 相當(dāng)于
* a = (a的數(shù)據(jù)類型)(a + 20);
*/
public class AssignmentOperator {
public static void main(String[] args) {
// 把10賦值給int類型的變量a
int a = 10;
// += 把左邊和右邊的數(shù)據(jù)進(jìn)行運算,最后賦值給左邊。左邊的只能是變量
a += 10;// 相當(dāng)于a = a + 10
System.out.println("a:" + a);
System.out.println("----------------------");
byte s = 10;
// s += 20; // 相當(dāng)于 s = s + 20;
s = (byte) (s + 20);
System.out.println("s:" + s);
}
}
關(guān)系運算符(比較運算符)
基本使用及注意事項
關(guān)系運算符:==,!=,>,>=,<,<=
關(guān)系運算符的結(jié)果都是boolean型,也就是要么是true,要么是false。
注意事項:
- 關(guān)系運算符“==”不能誤寫成“=”。
- ==表示的是左右兩邊是否相等。如果相等結(jié)果為true,不等結(jié)果false
- = 在Java中稱為賦值號。
/*
* 比較運算符:
*/
class ComparisonOperator {
public static void main(String[] args) {
int a = 3;
int b = 5;
System.out.println(a > b);
//比較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);
}
}
邏輯運算符
邏輯運算:就是針對命題的真假的或 、且(和、與)、非運算。
數(shù)學(xué)中的邏輯:
int i=3;
2<i<5
在java中不能像數(shù)學(xué)中那樣去寫,必須分開兩個表達(dá)式。
i>2 i<5
他們的中間就用邏輯運算符連接。
邏輯運算符概述
Java中的邏輯運算符:要求兩側(cè)的運算類型必須是boolean類型。邏輯運算符就是把多個boolean類型的值連接在一起。常見的邏輯運算符如下:
雙與(短路與)&& 單與 &
雙或(短路或)|| 單或 |
異或 ^ 非 !
運算規(guī)則
- 邏輯與運算規(guī)則:
針對邏輯與運算:當(dāng)兩側(cè)都為true的時候,結(jié)果才為true。否則結(jié)果為false(一假即假)。
true 與 true = true
false 與 true = false
true 與 false = false
false 與 false = false
tips:
單與(&)和雙與(&&)的區(qū)別:
雙與(&&):它在進(jìn)行運算的時候,當(dāng)左側(cè)為false的時候,右側(cè)不會參與運算。
單與(&) :它在進(jìn)行運算的時候,不管左邊是什么,右邊都要運算。(遵守邏輯與運算規(guī)則)
class LogicalOperatorAnd {
public static void main(String[] args) {
boolean flag1=10>1;//true
boolean flag2=10<1;//false
boolean flag3=10>5;//true
boolean flag4=10<5;//false
//true&&true------>true
System.out.println(flag1&&flag3);
//false&&true------>false
System.out.println(flag2&&flag3);
//true&&false------>false
System.out.println(flag1&&flag2);
//false&&false------>false
System.out.println(flag2&&flag4);
}
}
- 或運算原則:
針對邏輯或運算:當(dāng)兩側(cè)都為false的時候,結(jié)果才為false。否則結(jié)果為true(一真即真)。
true 或 true = true
false 或 true = true
true 或 false = true
false 或 false = false
tips:單或和雙或的區(qū)別:
||:當(dāng)左邊為true的時候,右側(cè)的不參與運算。
|:不管左邊是什么結(jié)果,右側(cè)都要運算。
class LogicalOperatorOr{
public static void main(String[] args)
{
boolean flag1=10>1;//true
boolean flag2=10<1;//false
boolean flag3=10>5;//true
boolean flag4=10<5;//false
//true||true------>true。
System.out.println(flag1||flag3);
//false||true------>true。
System.out.println(flag2||flag3);
//true||false------>true。
System.out.println(flag1||flag2);
//false||false------>false。
System.out.println(flag2||flag4);
}
}
- 邏輯異或:(了解)
兩側(cè)相同,結(jié)果為false;兩側(cè)不同,結(jié)果為true。
true ^ true = false
false ^ true = true
true ^ false = true
false ^ false = false
- 非運算:
!true 為false ,!false 為 true
結(jié)論:邏輯運算符的運算結(jié)果也是boolean類型。
三元運算符
三元運算符的格式
變量名 = 表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3;
三元運算符的運算原則
- 要求表達(dá)式1 運行的結(jié)果必須是一個boolean的結(jié)果。通過表達(dá)式1的這個結(jié)果確定到底是執(zhí)行表達(dá)式2還是表達(dá)式
- 當(dāng)表達(dá)式1為true,就把表達(dá)式2的結(jié)果作為三元運算的結(jié)果;當(dāng)表達(dá)式1為false的時候,把表達(dá)式3的結(jié)果作為三元運算的結(jié)果。
- 表達(dá)式1、表達(dá)式2、表達(dá)式3不能是語句,必須是表達(dá)式。
- 三元運算符運算后必須有結(jié)果。
class TernaryOperator {
public static void main(String[] args) {
/*
利用三元運算算出最大值
*/
//定義變量
int a = 3;
int b = 5;
int max;
max=a > b ? a : b;
System.out.println(max);
}
}
在運行上面程序的時候,JVM遇到了三元運算,這時JVM 會先執(zhí)行 a > b 這個表達(dá)式,3 > 5不成立
這時JVM 就會把變量b=5的結(jié)果作為三元運算的結(jié)果,賦值給max