Java基礎(三)★ 運算符

運算符

算術運算符

+加 -減 *乘 /除 %取模 ++自增 --自減 +字符串拼接運算

注意:

1. 兩個int類型運算完後之後,結果一定是int類型

2. byteshort類型在進行運算的時候,底層會自動提升爲int類型,然後進行計算

3. 對於byte b = 3 + 4; JVM在編譯的時候會進行優化,編譯完成之後,實際上這句話就已經成了byte b = 7;  

取模--取餘

103%3 = 1  2%5 = 2  4%2=0

-5%3=-2  -1% 3=-1

5%-3=2  1%-3=1

-5%-3=-2

對於負數的取餘,先按照正數的取餘運算,運算完成之後看%左邊的數字的符號,如果左邊的數是正數,結果就是正數,如果左邊的數字是負數,結果是就是負數。

3.2%2=1.2  3%1.2=0.6  -3.5 % 1.7=-0.1

++ 自增

相當於在原來的基礎上加了1 ->i = i + 1;

只有自增運算的時候,++在前在後結果一樣。

++在前,這個變量是先自增,然後再參與其他的運算 int i = 5; int j = ++i;--> i = j = 6;

++在後,先進行其他運算,然後這個變量再自增  int i = 5; int j = i++; i=6;j = 5;

int i = 5;

int j = i++ + ++i; j=12

int j = ++i + i++;  j=12

byte類型的數據可以進行自增運算嗎?

byte b = 3;

b++;---可以

在運算完成之後,Java在底層會對結果做一次強制類型的轉換,原來是byte類型就再轉換會byte類型

byte b = 127;

b++;

字符串拼接運算

“a” + “b” ->“ab”

2 + “a” ->“2a”

 2 + 3 + “a” ->“5a”

2 + ‘a’ -> 99

“a” + 2 + 3 ->“a23”

“a” + true->“atrue”

賦值運算符

= += -= *= /= %= &= |= ^=

=進行賦值運算

int i = 5;

i += 2; -> i = i + 2;

byte b = 25;

b += 5;---> 可以

除了=以外的賦值運算符,在使用之前,這個變量必須有初始值。

比較/關係運算符

==等於  !=不等於 ><>= <= instanceof

= 4--> true

3 > 4-> false

instanceof 用來判斷對象與類的關係的

邏輯運算符

&---與(And|---或(Or!---(Not) ^---異或 &&---短路與 ||---短路或

true&true=true true&false=false false&true=false false&false=false

true|true=true true|false=true false|true=true false|false=false

!true=false !false=true

true^true=false true^false=false^true=true false^false=false

java 中邏輯運算符&與&&,|與||

&&短路與,運算規則和&完全一樣,但是&&有短路特性,如果&&之前的運算結果確定爲false則後邊的表達式就不再運算。

對於||而言,如果前邊的表達式的結果爲true,則後邊的表達式就不再運算

一、&與&&的異同點。

相同點:二者都表示與操作,當且僅當運算符兩邊的操作數都爲true時,其結果才爲true,否則爲false。

不同點:在使用&進行運算時,不論左邊爲true或者false,右邊的表達式都會進行運算。如果使用&&進行運算時,當左邊爲false時,右邊的表達式不會進行運算,因此&&被稱作短路與。

二、|與||的異同點。

相同點:二者都表示或操作,當運算符兩邊的操作數任何一邊的值爲true時,其結果爲true,當兩邊的值都爲false時,其結果才爲false。

不同點:同與操作類似,||表示短路或,當運算符左邊的值爲true時,右邊的表達式不會進行運算。



位運算符

&與 |或 ^異或 <<左移 >>右移 >>>無符號右移 ~取反

注意:位運算是針對整數進行運算,位運算針對的是整數,運算的是數據的補碼

數據在計算機中是以補碼形式來存儲的。最高位是一個符號位---如果是正數,最高位爲0,如果是負數,最高位爲1. 對於正數而言,原反補三碼一致。負數的反碼是在原碼的基礎上,最高位不變,其餘位0->1,1->0,負數的補碼是在反碼的基礎上+1

6- 00000000 00000000 00000000 00000110---原碼/反碼/補碼
-6 - 10000000 00000000 00000000 00000110---原碼
  11111111 11111111 11111111 11111001---反碼
  11111111 11111111 11111111 11111010---補碼
  11111111 11111111 11111111 11101101---補碼
  11111111 11111111 11111111 11101100---反碼
  10000000 00000000 00000000 00010011---原碼--- -19


a ^ b ^ b = a;   b ^ b ^ a = a

交換兩個數的值:

int i = 3, j = 5;

方式一:第三方變量

int k = i;

i = j;

j = k;

方式二:加減法

i = i + j;

j = i - j;

i = i - j;

方式三:異或

i = i ^ j;

j = i ^ j; -> j = i ^ j ^ j; -> j = i;

i = i ^ j; -> i = i ^ j ^ i; -> i = j;

i ^= j; j ^= i; i ^= j;


三元運算符

邏輯/關係表達式 表達式1 :表達式2;

執行順序:如果邏輯/關係表達式結果爲true的話,執行表達式1,;反之執行表達式2

表達式1和表達式2的運算結果要求類型相同或相容

double d = a > b ? a * 2 : b * 2.5;
a > b ? System.out.println(a):System.out.println(b); //這種方式不允許,因爲沒有運算結果

注意:三元運算符也是一個運算符,所以運算完成之後一定有運算結果

在使用過程中,三元表達式形成嵌套的時候,儘量添加()來提高代碼的可讀性

int i = 3, j = 4;
System.out.println(i > j ? true : false);  //從語法上而言,沒問題
// i > j ? true : false -> i < j     (直接判斷truefalse System.out.println(i > j);

從控制檯獲取數據:

import java.util.Scanner;
Scanner s = new Scanner(System.in);
double d = s.nextDouble();   // 獲取小數
int i = s.nextInt();   // 獲取整數
String str = s.nextLine();  // 獲取一行

+ 字符串拼接運算

String s = “a”;

s = s + “b”; -> s = “ab”

可以利用+將兩個字符串進行拼接,或者也可以利用+將任何數據與字符串進行拼接




發佈了1 篇原創文章 · 獲贊 12 · 訪問量 6808
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章