欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java從入門(mén)到起飛之變量與運(yùn)算符詳解

 更新時(shí)間:2025年03月25日 10:12:04   作者:I'm?Joe  
這篇文章主要介紹了Java編程語(yǔ)言中的關(guān)鍵字、標(biāo)識(shí)符、變量、基本數(shù)據(jù)類(lèi)型以及運(yùn)算符等基本概念和用法,它涵蓋了變量聲明、賦值、類(lèi)型轉(zhuǎn)換、字符串操作以及運(yùn)算符優(yōu)先級(jí)等內(nèi)容,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

1. 關(guān)鍵字

  • 定義:被Java語(yǔ)言賦予了特殊含義,用做專(zhuān)門(mén)用途的字符串(或單詞)
    • HelloWorld案例中,出現(xiàn)的關(guān)鍵字有 class、public 、 static 、 void 等,這些單詞已經(jīng)被Java定義好了。
  • 特點(diǎn):全部關(guān)鍵字都是小寫(xiě)字母。
  • 關(guān)鍵字比較多,不需要死記硬背,學(xué)到哪里記到哪里即可。

說(shuō)明:

關(guān)鍵字一共50個(gè),其中constgoto保留字(reserved word)。

true,false,null不在其中,它們看起來(lái)像關(guān)鍵字,其實(shí)是字面量,表示特殊的布爾值和空值。

2. 標(biāo)識(shí)符

Java中變量、方法、類(lèi)等要素命名時(shí)使用的字符序列,稱(chēng)為標(biāo)識(shí)符。

技巧:凡是自己可以起名字的地方都叫標(biāo)識(shí)符。

標(biāo)識(shí)符的命名規(guī)則(必須遵守的硬性規(guī)定):

由26個(gè)英文字母大小寫(xiě),0-9 ,_或 $ 組成
數(shù)字不可以開(kāi)頭。
不可以使用關(guān)鍵字和保留字,但能包含關(guān)鍵字和保留字。
Java中嚴(yán)格區(qū)分大小寫(xiě),長(zhǎng)度無(wú)限制。
標(biāo)識(shí)符不能包含空格。

3. 變量

3.1 初識(shí)變量

  • 變量的概念:

    • 內(nèi)存中的一個(gè)存儲(chǔ)區(qū)域,該區(qū)域的數(shù)據(jù)可以在同一類(lèi)型范圍內(nèi)不斷變化

    • 變量的構(gòu)成包含三個(gè)要素:數(shù)據(jù)類(lèi)型、變量名、存儲(chǔ)的值

    • Java中變量聲明的格式:數(shù)據(jù)類(lèi)型 變量名 = 變量值

  • 變量的作用:用于在內(nèi)存中保存數(shù)據(jù)。

  • 使用變量注意:

    • Java中每個(gè)變量必須先聲明,后使用。
    • 使用變量名來(lái)訪(fǎng)問(wèn)這塊區(qū)域的數(shù)據(jù)。
    • 變量的作用域:其定義所在的一對(duì){ }內(nèi)。
    • 變量只有在其作用域內(nèi)才有效。出了作用域,變量不可以再被調(diào)用。
    • 同一個(gè)作用域內(nèi),不能定義重名的變量。

3.2 Java中變量的數(shù)據(jù)類(lèi)型

Java中變量的數(shù)據(jù)類(lèi)型分為兩大類(lèi):

  • 基本數(shù)據(jù)類(lèi)型:包括 整數(shù)類(lèi)型、浮點(diǎn)數(shù)類(lèi)型、字符類(lèi)型、布爾類(lèi)型。

  • 引用數(shù)據(jù)類(lèi)型:包括數(shù)組、 類(lèi)、接口、枚舉、注解、記錄。

3.3 變量的使用

3.3.1 步驟1:變量的聲明

格式:數(shù)據(jù)類(lèi)型  變量名;
//例如:
//存儲(chǔ)一個(gè)整數(shù)類(lèi)型的年齡
int age; 

//存儲(chǔ)一個(gè)小數(shù)類(lèi)型的體重
double weight;

//存儲(chǔ)一個(gè)單字符類(lèi)型的性別 
char gender;

//存儲(chǔ)一個(gè)布爾類(lèi)型的婚姻狀態(tài)
boolean marry;

//存儲(chǔ)一個(gè)字符串類(lèi)型的姓名
String name;

//聲明多個(gè)同類(lèi)型的變量
int a,b,c; //表示a,b,c三個(gè)變量都是int類(lèi)型。

注意:變量的數(shù)據(jù)類(lèi)型可以是基本數(shù)據(jù)類(lèi)型,也可以是引用數(shù)據(jù)類(lèi)型。

3.3.2 步驟2:變量的賦值

給變量賦值,就是把“值”存到該變量代表的內(nèi)存空間中。同時(shí),給變量賦的值類(lèi)型必須與變量聲明的類(lèi)型一致或兼容。

變量賦值的語(yǔ)法格式:

變量名 = 值;

舉例1:可以使用合適類(lèi)型的常量值給已經(jīng)聲明的變量賦值

age = 18;
weight = 109;
gender = '女';

舉例2:可以使用其他變量或者表達(dá)式給變量賦值

int m = 1;
int n = m;
        
int x = 1;
int y = 2;
int z = 2 * x + y;

3:變量可以反復(fù)賦值

//先聲明,后初始化
char gender;
gender = '女';

//給變量重新賦值,修改gender變量的值
gender = '男';
System.out.println("gender = " + gender);//gender = 男

舉例4:也可以將變量的聲明和賦值一并執(zhí)行

boolean isBeauty = true;
String name = "迪麗熱巴";

內(nèi)存結(jié)構(gòu)如圖:

4. 基本數(shù)據(jù)類(lèi)型介紹

4.1 整數(shù)類(lèi)型:byte、short、int、long

  • Java各整數(shù)類(lèi)型有固定的表數(shù)范圍和字段長(zhǎng)度,不受具體操作系統(tǒng)的影響,以保證Java程序的可移植性。

  • 定義long類(lèi)型的變量,賦值時(shí)需要以"l"或"L"作為后綴。

  • Java程序中變量通常聲明為int型,除非不足以表示較大的數(shù),才使用long。

  • Java的整型常量默認(rèn)為 int 型。

4.1.1 補(bǔ)充:計(jì)算機(jī)存儲(chǔ)單位

  • **字節(jié)(Byte):**是計(jì)算機(jī)用于計(jì)量存儲(chǔ)容量的基本單位,一個(gè)字節(jié)等于8 bit。

  • **位(bit):**是數(shù)據(jù)存儲(chǔ)的最小單位。二進(jìn)制數(shù)系統(tǒng)中,每個(gè)0或1就是一個(gè)位,叫做bit(比特),其中8 bit 就稱(chēng)為一個(gè)字節(jié)(Byte)。

  • 轉(zhuǎn)換關(guān)系:

    • 8 bit = 1 Byte
    • 1024 Byte = 1 KB
    • 1024 KB = 1 MB
    • 1024 MB = 1 GB
    • 1024 GB = 1 TB

4.2 浮點(diǎn)類(lèi)型:float、double

  • 與整數(shù)類(lèi)型類(lèi)似,Java 浮點(diǎn)類(lèi)型也有固定的表數(shù)范圍和字段長(zhǎng)度,不受具體操作系統(tǒng)的影響。

  • 浮點(diǎn)型常量有兩種表示形式:
    • 十進(jìn)制數(shù)形式。如:5.12 512.0f .512 (必須有小數(shù)點(diǎn))
    • 科學(xué)計(jì)數(shù)法形式。如:5.12e2 512E2 100E-2
  • float:單精度,尾數(shù)可以精確到7位有效數(shù)字。很多情況下,精度很難滿(mǎn)足需求。
  • double:雙精度,精度是float的兩倍。通常采用此類(lèi)型。
  • 定義float類(lèi)型的變量,賦值時(shí)需要以"f"或"F"作為后綴。
  • Java 的浮點(diǎn)型常量默認(rèn)為double型。

4.2.1 關(guān)于浮點(diǎn)型精度的說(shuō)明

  • 并不是所有的小數(shù)都能可以精確的用二進(jìn)制浮點(diǎn)數(shù)表示。二進(jìn)制浮點(diǎn)數(shù)不能精確的表示0.1、0.01、0.001這樣10的負(fù)次冪。

  • 浮點(diǎn)類(lèi)型float、double的數(shù)據(jù)不適合在不容許舍入誤差的金融計(jì)算領(lǐng)域。如果需要精確數(shù)字計(jì)算或保留指定位數(shù)的精度,需要使用BigDecimal類(lèi)。

  • 測(cè)試用例:

//測(cè)試1:(解釋見(jiàn)章末企業(yè)真題:為什么0.1 + 0.2不等于0.3)
System.out.println(0.1 + 0.2);//0.30000000000000004

//測(cè)試2:
float ff1 = 123123123f;
float ff2 = ff1 + 1;
System.out.println(ff1);
System.out.println(ff2);
System.out.println(ff1 == ff2);

4.3 字符類(lèi)型:char

  • char 型數(shù)據(jù)用來(lái)表示通常意義上“字符”(占2字節(jié))

  • Java中的所有字符都使用Unicode編碼,故一個(gè)字符可以存儲(chǔ)一個(gè)字母,一個(gè)漢字,或其他書(shū)面語(yǔ)的一個(gè)字符。

  • 字符型變量的三種表現(xiàn)形式:

    • **形式1:**使用單引號(hào)(’ ')括起來(lái)的單個(gè)字符。

      例如:char c1 = ‘a’; char c2 = ‘中’; char c3 = ‘9’;

    • **形式2:**直接使用 Unicode值來(lái)表示字符型常量:‘\uXXXX’。其中,XXXX代表一個(gè)十六進(jìn)制整數(shù)。

      例如:\u0023 表示 ‘#’。

    • **形式3:**Java中還允許使用轉(zhuǎn)義字符‘\’來(lái)將其后的字符轉(zhuǎn)變?yōu)樘厥庾址统A俊?/p>

      例如:char c3 = ‘\n’; // '\n’表示換行符

    轉(zhuǎn)義字符說(shuō)明Unicode表示方式
    \n換行符\u000a
    \t制表符\u0009
    \"雙引號(hào)\u0022
    \'單引號(hào)\u0027
    \\反斜線(xiàn)\u005c
    \b退格符\u0008
    \r回車(chē)符\u000d
  • char類(lèi)型是可以進(jìn)行運(yùn)算的。因?yàn)樗紝?duì)應(yīng)有Unicode碼,可以看做是一個(gè)數(shù)值。

4.4 布爾類(lèi)型:boolean

  • boolean 類(lèi)型用來(lái)判斷邏輯條件,一般用于流程控制語(yǔ)句中:

    • if條件控制語(yǔ)句;
    • while循環(huán)控制語(yǔ)句;
    • for循環(huán)控制語(yǔ)句;
    • do-while循環(huán)控制語(yǔ)句;
  • boolean類(lèi)型數(shù)據(jù)只有兩個(gè)值:true、false,無(wú)其它。

    • 不可以使用0或非 0 的整數(shù)替代false和true,這點(diǎn)和C語(yǔ)言不同。
    • 拓展:Java虛擬機(jī)中沒(méi)有任何供boolean值專(zhuān)用的字節(jié)碼指令,Java語(yǔ)言表達(dá)所操作的boolean值,在編譯之后都使用java虛擬機(jī)中的int數(shù)據(jù)類(lèi)型來(lái)代替:true用1表示,false用0表示。——《java虛擬機(jī)規(guī)范 8版》
  • 舉例:

boolean isFlag = true;

if(isFlag){
    //true分支
}else{  
    //false分支
}

經(jīng)驗(yàn)之談:

Less is More!建議不要這樣寫(xiě):if ( isFlag = = true ),只有新手才如此。關(guān)鍵也很容易寫(xiě)錯(cuò)成if(isFlag = true),這樣就變成賦值isFlag為true而不是判斷!老鳥(niǎo)的寫(xiě)法是if (isFlag)或者if ( !isFlag)。

5. 基本數(shù)據(jù)類(lèi)型變量間運(yùn)算規(guī)則

在Java程序中,不同的基本數(shù)據(jù)類(lèi)型(只有7種,不包含boolean類(lèi)型)變量的值經(jīng)常需要進(jìn)行相互轉(zhuǎn)換。

轉(zhuǎn)換的方式有兩種:自動(dòng)類(lèi)型提升和強(qiáng)制類(lèi)型轉(zhuǎn)換。

5.1 自動(dòng)類(lèi)型提升

規(guī)則:將取值范圍?。ɑ蛉萘啃。┑念?lèi)型自動(dòng)提升為取值范圍大(或容量大)的類(lèi)型 。

基本數(shù)據(jù)類(lèi)型的轉(zhuǎn)換規(guī)則如圖所示:

(1)當(dāng)把存儲(chǔ)范圍小的值(常量值、變量的值、表達(dá)式計(jì)算的結(jié)果值)賦值給了存儲(chǔ)范圍大的變量時(shí)

int i = 'A';//char自動(dòng)升級(jí)為int,其實(shí)就是把字符的編碼值賦值給i變量了
double d = 10;//int自動(dòng)升級(jí)為double
long num = 1234567; //右邊的整數(shù)常量值如果在int范圍呢,編譯和運(yùn)行都可以通過(guò),這里涉及到數(shù)據(jù)類(lèi)型轉(zhuǎn)換

//byte bigB = 130;//錯(cuò)誤,右邊的整數(shù)常量值超過(guò)byte范圍
long bigNum = 12345678912L;//右邊的整數(shù)常量值如果超過(guò)int范圍,必須加L,顯式表示long類(lèi)型。否則編譯不通過(guò)

(2)當(dāng)存儲(chǔ)范圍小的數(shù)據(jù)類(lèi)型與存儲(chǔ)范圍大的數(shù)據(jù)類(lèi)型變量一起混合運(yùn)算時(shí),會(huì)按照其中最大的類(lèi)型運(yùn)算。

int i = 1;
byte b = 1;
double d = 1.0;

double sum = i + b + d;//混合運(yùn)算,升級(jí)為double

(3)當(dāng)byte,short,char數(shù)據(jù)類(lèi)型的變量進(jìn)行算術(shù)運(yùn)算時(shí),按照int類(lèi)型處理。

byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2;//編譯報(bào)錯(cuò),b1 + b2自動(dòng)升級(jí)為int

char c1 = '0';
char c2 = 'A';
int i = c1 + c2;//至少需要使用int類(lèi)型來(lái)接收
System.out.println(c1 + c2);//113 

5.2 強(qiáng)制類(lèi)型轉(zhuǎn)換

3.14 賦值到int 類(lèi)型變量會(huì)發(fā)生什么?產(chǎn)生編譯失敗,肯定無(wú)法賦值。

int i = 3.14; // 編譯報(bào)錯(cuò)

想要賦值成功,只有通過(guò)強(qiáng)制類(lèi)型轉(zhuǎn)換,將double 類(lèi)型強(qiáng)制轉(zhuǎn)換成int 類(lèi)型才能賦值。

規(guī)則:將取值范圍大(或容量大)的類(lèi)型強(qiáng)制轉(zhuǎn)換成取值范圍?。ɑ蛉萘啃。┑念?lèi)型。

自動(dòng)類(lèi)型提升是Java自動(dòng)執(zhí)行的,而強(qiáng)制類(lèi)型轉(zhuǎn)換是自動(dòng)類(lèi)型提升的逆運(yùn)算,需要我們自己手動(dòng)執(zhí)行。

轉(zhuǎn)換格式:

數(shù)據(jù)類(lèi)型1 變量名 = (數(shù)據(jù)類(lèi)型1)被強(qiáng)轉(zhuǎn)數(shù)據(jù)值;  //()中的數(shù)據(jù)類(lèi)型必須<=變量值的數(shù)據(jù)類(lèi)型

(1)當(dāng)把存儲(chǔ)范圍大的值(常量值、變量的值、表達(dá)式計(jì)算的結(jié)果值)強(qiáng)制轉(zhuǎn)換為存儲(chǔ)范圍小的變量時(shí),可能會(huì)損失精度溢出。

int i = (int)3.14;//損失精度

double d = 1.2;
int num = (int)d;//損失精度

int i = 200;
byte b = (byte)i;//溢出

(2)當(dāng)某個(gè)值想要提升數(shù)據(jù)類(lèi)型時(shí),也可以使用強(qiáng)制類(lèi)型轉(zhuǎn)換。這種情況的強(qiáng)制類(lèi)型轉(zhuǎn)換是沒(méi)有風(fēng)險(xiǎn)的,通常省略。

int i = 1;
int j = 2;
double bigger = (double)(i/j);

(3)聲明long類(lèi)型變量時(shí),可以出現(xiàn)省略后綴的情況。float則不同。

long l1 = 123L;
long l2 = 123;//如何理解呢? 此時(shí)可以看做是int類(lèi)型的123自動(dòng)類(lèi)型提升為long類(lèi)型

//long l3 = 123123123123; //報(bào)錯(cuò),因?yàn)?23123123123超出了int的范圍。
long l4 = 123123123123L;


//float f1 = 12.3; //報(bào)錯(cuò),因?yàn)?2.3看做是double,不能自動(dòng)轉(zhuǎn)換為float類(lèi)型
float f2 = 12.3F;
float f3 = (float)12.3;

6 基本數(shù)據(jù)類(lèi)型與String的運(yùn)算

6.1 字符串類(lèi)型:String

  • String不是基本數(shù)據(jù)類(lèi)型,屬于引用數(shù)據(jù)類(lèi)型
  • 使用一對(duì)""來(lái)表示一個(gè)字符串,內(nèi)部可以包含0個(gè)、1個(gè)或多個(gè)字符。
  • 聲明方式與基本數(shù)據(jù)類(lèi)型類(lèi)似。例如:String str = “尚硅谷”;

6.2 運(yùn)算規(guī)則

1、任意八種基本數(shù)據(jù)類(lèi)型的數(shù)據(jù)與String類(lèi)型只能進(jìn)行連接“+”運(yùn)算,且結(jié)果一定也是String類(lèi)型

System.out.println("" + 1 + 2);//12

int num = 10;
boolean b1 = true;
String s1 = "abc";

String s2 = s1 + num + b1;
System.out.println(s2);//abc10true

//String s3 = num + b1 + s1;//編譯不通過(guò),因?yàn)閕nt類(lèi)型不能與boolean運(yùn)算
String s4 = num + (b1 + s1);//編譯通過(guò)

2、String類(lèi)型不能通過(guò)強(qiáng)制類(lèi)型()轉(zhuǎn)換,轉(zhuǎn)為其他的類(lèi)型

String str = "123";
int num = (int)str;//錯(cuò)誤的

int num = Integer.parseInt(str);//正確的,后面才能講到,借助包裝類(lèi)的方法才能轉(zhuǎn)

7. 運(yùn)算符

運(yùn)算符是一種特殊的符號(hào),用以表示數(shù)據(jù)的運(yùn)算、賦值和比較等。

運(yùn)算符的分類(lèi):

  • 按照功能分為:算術(shù)運(yùn)算符、賦值運(yùn)算符、比較(或關(guān)系)運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、條件運(yùn)算符、Lambda運(yùn)算符
分類(lèi)運(yùn)算符
算術(shù)運(yùn)算符(7個(gè))+、-、*、/、%、++、–
賦值運(yùn)算符(12個(gè))=、+=、-=、*=、/=、%=、>>=、<<=、>>>=、&=、|=、^=等
比較(或關(guān)系)運(yùn)算符(6個(gè))>、>=、<、<=、==、!=
邏輯運(yùn)算符(6個(gè))&、|、^、!、&&、||
位運(yùn)算符(7個(gè))&、|、^、~、<<、>>、>>>
條件運(yùn)算符(1個(gè))(條件表達(dá)式)?結(jié)果1:結(jié)果2
Lambda運(yùn)算符(1個(gè))->(第18章時(shí)講解)
  • 按照操作數(shù)個(gè)數(shù)分為:一元運(yùn)算符(單目運(yùn)算符)、二元運(yùn)算符(雙目運(yùn)算符)、三元運(yùn)算符 (三目運(yùn)算符)
分類(lèi)運(yùn)算符
一元運(yùn)算符(單目運(yùn)算符)正號(hào)(+)、負(fù)號(hào)(-)、++、–、!、~
二元運(yùn)算符(雙目運(yùn)算符)除了一元和三元運(yùn)算符剩下的都是二元運(yùn)算符
三元運(yùn)算符 (三目運(yùn)算符)(條件表達(dá)式)?結(jié)果1:結(jié)果2

7.1 算術(shù)運(yùn)算符

7.1.1 基本語(yǔ)法

舉例1:加減乘除模

public class ArithmeticTest1 {
	public static void main(String[] args) {
		int a = 3;
		int b = 4;
		
		System.out.println(a + b);// 7
		System.out.println(a - b);// -1
		System.out.println(a * b);// 12
		System.out.println(a / b);// 計(jì)算機(jī)結(jié)果是0,為什么不是0.75呢?
		System.out.println(a % b);// 3
        
        //結(jié)果與被模數(shù)符號(hào)相同
        System.out.println(5%2);//1
		System.out.println(5%-2);//1
		System.out.println(-5%2);//-1
		System.out.println(-5%-2);//-1		
		//商*除數(shù) + 余數(shù) = 被除數(shù)
		//5%-2  ==>商是-2,余數(shù)時(shí)1    (-2)*(-2)+1 = 5
		//-5%2  ==>商是-2,余數(shù)是-1   (-2)*2+(-1) = -4-1=-5
	}
}

舉例2:“+”號(hào)的兩種用法

  • 第一種:對(duì)于+兩邊都是數(shù)值的話(huà),+就是加法的意思
  • 第二種:對(duì)于+兩邊至少有一邊是字符串的話(huà),+就是拼接的意思
public class ArithmeticTest2 {
	public static void main(String[] args) {
		// 字符串類(lèi)型的變量基本使用
		// 數(shù)據(jù)類(lèi)型 變量名稱(chēng) = 數(shù)據(jù)值;
		String str1 = "Hello";
		System.out.println(str1); // Hello
		
		System.out.println("Hello" + "World"); // HelloWorld
		
		String str2 = "Java";
		// String + int --> String
		System.out.println(str2 + 520); // Java520
		// String + int + int
		// String		+ int
		// String
		System.out.println(str2 + 5 + 20); // Java520
	}
}

舉例3:自加自減運(yùn)算

理解:++ 運(yùn)算,表示自增1。同理,-- 運(yùn)算,表示自減1,用法與++ 一致。

1、單獨(dú)使用

  • 變量在單獨(dú)運(yùn)算的時(shí)候,變量前++和變量后++,是沒(méi)有區(qū)別的。
  • 變量前++ :例如 ++a 。
  • 變量后++ :例如 a++ 。
public class ArithmeticTest3 {
	public static void main(String[] args) {
		// 定義一個(gè)int類(lèi)型的變量a
		int a = 3;
		//++a;
		a++;
        // 無(wú)論是變量前++還是變量后++,結(jié)果都是4
		System.out.println(a);
	}
}

2、復(fù)合使用

  • 和其他變量放在一起使用或者和輸出語(yǔ)句放在一起使用,前++和后++就產(chǎn)生了不同。
  • 變量前++ :變量先自增1,然后再運(yùn)算。
  • 變量后++ :變量先運(yùn)算,然后再自增1。
public class ArithmeticTest4 {
	public static void main(String[] args) {
		// 其他變量放在一起使用
		int x = 3;
		//int y = ++x; // y的值是4,x的值是4,
		int y = x++; // y的值是3,x的值是4
		
		System.out.println(x);
		System.out.println(y);
		System.out.println("==========");
        
		// 和輸出語(yǔ)句一起
		int z = 5;
		//System.out.println(++z);// 輸出結(jié)果是6,z的值也是6
		System.out.println(z++);// 輸出結(jié)果是5,z的值是6
		System.out.println(z);
        
	} 
}

7.2 賦值運(yùn)算符

7.2.1 基本語(yǔ)法

  • 符號(hào):=

    • 當(dāng)“=”兩側(cè)數(shù)據(jù)類(lèi)型不一致時(shí),可以使用自動(dòng)類(lèi)型轉(zhuǎn)換或使用強(qiáng)制類(lèi)型轉(zhuǎn)換原則進(jìn)行處理。
    • 支持連續(xù)賦值。
  • 擴(kuò)展賦值運(yùn)算符: +=、 -=、*=、 /=、%=

    賦值運(yùn)算符符號(hào)解釋
    +=將符號(hào)左邊的值和右邊的值進(jìn)行相加操作,最后將結(jié)果賦值給左邊的變量
    -=將符號(hào)左邊的值和右邊的值進(jìn)行相減操作,最后將結(jié)果賦值給左邊的變量
    *=將符號(hào)左邊的值和右邊的值進(jìn)行相乘操作,最后將結(jié)果賦值給左邊的變量
    /=將符號(hào)左邊的值和右邊的值進(jìn)行相除操作,最后將結(jié)果賦值給左邊的變量
    %=將符號(hào)左邊的值和右邊的值進(jìn)行取余操作,最后將結(jié)果賦值給左邊的變量
public class SetValueTest1 {
	public static void main(String[] args) {
		int i1 = 10;
		long l1 = i1; //自動(dòng)類(lèi)型轉(zhuǎn)換

		byte bb1 = (byte)i1; //強(qiáng)制類(lèi)型轉(zhuǎn)換

		int i2 = i1;

		//連續(xù)賦值的測(cè)試
		//以前的寫(xiě)法
		int a1 = 10;
		int b1 = 10;
		
		//連續(xù)賦值的寫(xiě)法
		int a2,b2;
		a2 = b2 = 10;
		
		int a3 = 10,b3 = 20;

		//舉例說(shuō)明+=  -=  *=  /=   %=  
		int m1 = 10;
		m1 += 5; //類(lèi)似于 m1 = m1 + 5的操作,但不等同于。
		System.out.println(m1);//15
		
		//練習(xí)1:開(kāi)發(fā)中,如何實(shí)現(xiàn)一個(gè)變量+2的操作呢?
		// += 的操作不會(huì)改變變量本身的數(shù)據(jù)類(lèi)型。其他拓展的運(yùn)算符也如此。
		//寫(xiě)法1:推薦
		short s1 = 10;
		s1 += 2; //編譯通過(guò),因?yàn)樵诘玫絠nt類(lèi)型的結(jié)果后,JVM自動(dòng)完成一步強(qiáng)制類(lèi)型轉(zhuǎn)換,將int類(lèi)型強(qiáng)轉(zhuǎn)成short
		System.out.println(s1);//12
		//寫(xiě)法2:
		short s2 = 10;
		//s2 = s2 + 2;//編譯報(bào)錯(cuò),因?yàn)閷nt類(lèi)型的結(jié)果賦值給short類(lèi)型的變量s時(shí),可能損失精度
		s2 = (short)(s2 + 2);
		System.out.println(s2);


		//練習(xí)2:開(kāi)發(fā)中,如何實(shí)現(xiàn)一個(gè)變量+1的操作呢?
		//寫(xiě)法1:推薦
		int num1 = 10;
		num1++;
		System.out.println(num1);

		//寫(xiě)法2:
		int num2 = 10;
		num2 += 1;
		System.out.println(num2);

		//寫(xiě)法3:
		int num3 = 10;
		num3 = num3 + 1;
		System.out.println(num3);

	}
}

7.3 比較(關(guān)系)運(yùn)算符

  • 比較運(yùn)算符的結(jié)果都是boolean型,也就是要么是true,要么是false。

  • > < >= <= :只適用于基本數(shù)據(jù)類(lèi)型(除boolean類(lèi)型之外)

    == != :適用于基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型

  • 比較運(yùn)算符“==”不能誤寫(xiě)成“=

舉例:

class CompareTest {
	public static void main(String[] args) {
		int i1 = 10;
		int i2 = 20;
		
		System.out.println(i1 == i2);//false
		System.out.println(i1 != i2);//true
		System.out.println(i1 >= i2);//false


		int m = 10;
		int n = 20;
		System.out.println(m == n);//false
		System.out.println(m = n);//20

		boolean b1 = false;
		boolean b2 = true;
		System.out.println(b1 == b2);//false
		System.out.println(b1 = b2);//true
	}
}

7.4 邏輯運(yùn)算符

7.4.1 基本語(yǔ)法

  • 邏輯運(yùn)算符,操作的都是boolean類(lèi)型的變量或常量,而且運(yùn)算得結(jié)果也是boolean類(lèi)型的值。

  • 運(yùn)算符說(shuō)明:

    • & 和 &&:表示"且"關(guān)系,當(dāng)符號(hào)左右兩邊布爾值都是true時(shí),結(jié)果才能為true。否則,為false。
    • | 和 || :表示"或"關(guān)系,當(dāng)符號(hào)兩邊布爾值有一邊為true時(shí),結(jié)果為true。當(dāng)兩邊都為false時(shí),結(jié)果為false
    • ! :表示"非"關(guān)系,當(dāng)變量布爾值為true時(shí),結(jié)果為false。當(dāng)變量布爾值為false時(shí),結(jié)果為true。
    • ^ :當(dāng)符號(hào)左右兩邊布爾值不同時(shí),結(jié)果為true。當(dāng)兩邊布爾值相同時(shí),結(jié)果為false。
      • 理解:異或,追求的是“異”!
  • 邏輯運(yùn)算符用于連接布爾型表達(dá)式,在Java中不可以寫(xiě)成 3 < x < 6,應(yīng)該寫(xiě)成x > 3 & x < 6 。

  • 區(qū)分“&”和“&&”:

    • 相同點(diǎn):如果符號(hào)左邊是true,則二者都執(zhí)行符號(hào)右邊的操作

    • 不同點(diǎn):& : 如果符號(hào)左邊是false,則繼續(xù)執(zhí)行符號(hào)右邊的操作

    ? && :如果符號(hào)左邊是false,則不再繼續(xù)執(zhí)行符號(hào)右邊的操作

    • 建議:開(kāi)發(fā)中,推薦使用 &&
  • 區(qū)分“|”和“||”:

    • 相同點(diǎn):如果符號(hào)左邊是false,則二者都執(zhí)行符號(hào)右邊的操作

    • 不同點(diǎn):| : 如果符號(hào)左邊是true,則繼續(xù)執(zhí)行符號(hào)右邊的操作

      ? || :如果符號(hào)左邊是true,則不再繼續(xù)執(zhí)行符號(hào)右邊的操作

    • 建議:開(kāi)發(fā)中,推薦使用 ||

代碼舉例:

public class LoginTest {
	public static void main(String[] args) {
		int a = 3;
		int b = 4;
		int c = 5;

		// & 與,且;有false則false
		System.out.println((a > b) & (a > c)); 
		System.out.println((a > b) & (a < c)); 
		System.out.println((a < b) & (a > c)); 
		System.out.println((a < b) & (a < c)); 
		System.out.println("===============");
		// | 或;有true則true
		System.out.println((a > b) | (a > c)); 
		System.out.println((a > b) | (a < c)); 
		System.out.println((a < b) | (a > c));
		System.out.println((a < b) | (a < c));
		System.out.println("===============");
		// ^ 異或;相同為false,不同為true
		System.out.println((a > b) ^ (a > c));
		System.out.println((a > b) ^ (a < c)); 
		System.out.println((a < b) ^ (a > c)); 
		System.out.println((a < b) ^ (a < c)); 
		System.out.println("===============");
		// ! 非;非false則true,非true則false
		System.out.println(!false);
		System.out.println(!true);
        
        //&和&&的區(qū)別
        System.out.println((a > b) & (a++ > c)); 
        System.out.println("a = " + a);
        System.out.println((a > b) && (a++ > c)); 
        System.out.println("a = " + a);
        System.out.println((a == b) && (a++ > c)); 
        System.out.println("a = " + a);
        
        //|和||的區(qū)別
        System.out.println((a > b) | (a++ > c)); 
        System.out.println("a = " + a);
        System.out.println((a > b) || (a++ > c)); 
        System.out.println("a = " + a);
        System.out.println((a == b) || (a++ > c)); 
        System.out.println("a = " + a);
	}
}

7.5 位運(yùn)算符

7.5.1 基本語(yǔ)法

  • 位運(yùn)算符的運(yùn)算過(guò)程都是基于二進(jìn)制的補(bǔ)碼運(yùn)算

(1)左移:<<

運(yùn)算規(guī)則:在一定范圍內(nèi),數(shù)據(jù)每向左移動(dòng)一位,相當(dāng)于原數(shù)據(jù)*2。(正數(shù)、負(fù)數(shù)都適用)

【注意】當(dāng)左移的位數(shù)n超過(guò)該數(shù)據(jù)類(lèi)型的總位數(shù)時(shí),相當(dāng)于左移(n-總位數(shù))位

3<<4  類(lèi)似于  3*2的4次冪 => 3*16 => 48

在這里插入圖片描述

-3<<4  類(lèi)似于  -3*2的4次冪 => -3*16 => -48

(2)右移:>>

運(yùn)算規(guī)則:在一定范圍內(nèi),數(shù)據(jù)每向右移動(dòng)一位,相當(dāng)于原數(shù)據(jù)/2。(正數(shù)、負(fù)數(shù)都適用)

【注意】如果不能整除,向下取整。

69>>4  類(lèi)似于  69/2的4次 = 69/16 =4

-69>>4  類(lèi)似于  -69/2的4次 = -69/16 = -5

(3)無(wú)符號(hào)右移:>>>

運(yùn)算規(guī)則:往右移動(dòng)后,左邊空出來(lái)的位直接補(bǔ)0。(正數(shù)、負(fù)數(shù)都適用)

69>>>4  類(lèi)似于  69/2的4次 = 69/16 =4

-69>>>4   結(jié)果:268435451

(4)按位與:&

運(yùn)算規(guī)則:對(duì)應(yīng)位都是1才為1,否則為0。

  • 1 & 1 結(jié)果為1

  • 1 & 0 結(jié)果為0

  • 0 & 1 結(jié)果為0

  • 0 & 0 結(jié)果為0

9 & 7 = 1

-9 & 7 = 7

(5)按位或:|

運(yùn)算規(guī)則:對(duì)應(yīng)位只要有1即為1,否則為0。

  • 1 | 1 結(jié)果為1

  • 1 | 0 結(jié)果為1

  • 0 | 1 結(jié)果為1

  • 0 & 0 結(jié)果為0

9 | 7  //結(jié)果: 15

-9 | 7 //結(jié)果: -9

(6)按位異或:^

運(yùn)算規(guī)則:對(duì)應(yīng)位一個(gè)為1一個(gè)為0,才為1,否則為0。

  • 1 ^ 1 結(jié)果為0

  • 1 ^ 0 結(jié)果為1

  • 0 ^ 1 結(jié)果為1

  • 0 ^ 0 結(jié)果為0

9 ^ 7  //結(jié)果為14

-9 ^ 7 //結(jié)果為-16

(7)按位取反:~

運(yùn)算規(guī)則:對(duì)應(yīng)位為1,則結(jié)果為0;對(duì)應(yīng)位為0,則結(jié)果為1。

  • ~0就是1

  • ~1就是0

~9  //結(jié)果:-10

~-9  //結(jié)果:8

7.6 條件運(yùn)算符

7.6.1 基本語(yǔ)法

  • 條件運(yùn)算符格式:
(條件表達(dá)式)? 表達(dá)式1:表達(dá)式2
  • 說(shuō)明:條件表達(dá)式是boolean類(lèi)型的結(jié)果,根據(jù)boolean的值選擇表達(dá)式1或表達(dá)式2

  • 如果運(yùn)算后的結(jié)果賦給新的變量,要求表達(dá)式1和表達(dá)式2為同種或兼容的類(lèi)型

public static void main(String[] args) {
    int i = (1==2 ? 100 : 200);
    System.out.println(i);//200
    
    boolean marry = false;
	System.out.println(marry ? "已婚" : "未婚"  );
    
    double d1 = (m1 > m2)? 1 : 2.0;
	System.out.println(d1);
    
    int num = 12;
    System.out.println(num > 0? true : "num非正數(shù)");
}

7.6.2 與if-else的轉(zhuǎn)換關(guān)系

  • 凡是可以使用條件運(yùn)算符的地方,都可以改寫(xiě)為if-else結(jié)構(gòu)。反之,不成立。

  • 開(kāi)發(fā)中,如果既可以使用條件運(yùn)算符,又可以使用if-else,推薦使用條件運(yùn)算符。因?yàn)閳?zhí)行效率稍高。

//if-else實(shí)現(xiàn)獲取兩個(gè)數(shù)的較大值

int i1 = 10;
int i2 = 20;

int max;//聲明變量max,用于記錄i1和i2的較大值

if(i1 > i2){
    max = i1;
}else{
    max = i2;
}

System.out.println(max);

7.7 運(yùn)算符優(yōu)先級(jí)

運(yùn)算符有不同的優(yōu)先級(jí),所謂優(yōu)先級(jí)就是在表達(dá)式運(yùn)算中的運(yùn)算符順序。

上一行中的運(yùn)算符總是優(yōu)先于下一行的。

優(yōu)先級(jí)運(yùn)算符說(shuō)明Java運(yùn)算符
1括號(hào)()、[]、{}
2正負(fù)號(hào)+、-
3單元運(yùn)算符++--、~!
4乘法、除法、求余*/、%
5加法、減法+、-
6移位運(yùn)算符<<>>、>>>
7關(guān)系運(yùn)算符<、<=、>=、>、instanceof
8等價(jià)運(yùn)算符==!=
9按位與&
10按位異或^
11按位或`
12條件與&&
13條件或`
14三元運(yùn)算符? :
15賦值運(yùn)算符=、+=-=、*=、/=、%=
16位賦值運(yùn)算符&=、`

開(kāi)發(fā)建議:

不要過(guò)多的依賴(lài)運(yùn)算的優(yōu)先級(jí)來(lái)控制表達(dá)式的執(zhí)行順序,這樣可讀性太差,盡量使用()來(lái)控制表達(dá)式的執(zhí)行順序。

不要把一個(gè)表達(dá)式寫(xiě)得過(guò)于復(fù)雜,如果一個(gè)表達(dá)式過(guò)于復(fù)雜,則把它分成幾步來(lái)完成。例如:
? (num1 + num2) * 2 > num3 && num2 > num3 ? num3 : num1 + num2;

總結(jié) 

到此這篇關(guān)于Java變量與運(yùn)算符詳解的文章就介紹到這了,更多相關(guān)Java變量與運(yùn)算符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中synchronized?的4個(gè)優(yōu)化技巧

    Java中synchronized?的4個(gè)優(yōu)化技巧

    本文主要介紹了Java中synchronized的4個(gè)優(yōu)化技巧,synchronized在JDK?1.5?時(shí)性能是比較低的,然而在后續(xù)的版本中經(jīng)過(guò)各種優(yōu)化迭代,它的性能也得到了前所未有的提升,下文更多相關(guān)資料需要的小伙伴可以參考一下
    2022-05-05
  • 深入理解Java之jvm啟動(dòng)流程

    深入理解Java之jvm啟動(dòng)流程

    這篇文章主要介紹了深入理解Java之jvm啟動(dòng)流程,文章內(nèi)容講解的很清晰,有對(duì)這方面感興趣的同學(xué)可以研究下
    2021-02-02
  • 簡(jiǎn)單介紹線(xiàn)性表以及如何實(shí)現(xiàn)雙鏈表

    簡(jiǎn)單介紹線(xiàn)性表以及如何實(shí)現(xiàn)雙鏈表

    本文先介紹線(xiàn)性表的幾個(gè)基本組成部分:數(shù)組、單向鏈表、雙向鏈表;隨后給出雙向鏈表的C、C++和Java三種語(yǔ)言的實(shí)現(xiàn),需要的朋友可以參考下
    2015-07-07
  • Java如何實(shí)現(xiàn)生成報(bào)表并將其導(dǎo)出為Excel

    Java如何實(shí)現(xiàn)生成報(bào)表并將其導(dǎo)出為Excel

    在許多企業(yè)應(yīng)用中,生成報(bào)表并將其導(dǎo)出到Excel表格是一項(xiàng)常見(jiàn)需求,這篇文章主要為大家介紹了Java如何實(shí)現(xiàn)生成報(bào)表并將其導(dǎo)出為Excel,需要的可以參考下
    2025-02-02
  • Spring Boot Actuator入門(mén)指南

    Spring Boot Actuator入門(mén)指南

    SpringBootActuator是SpringBoot提供的一系列產(chǎn)品級(jí)特性,用于監(jiān)控應(yīng)用程序、收集元數(shù)據(jù)和運(yùn)行情況,通過(guò)添加依賴(lài),可以通過(guò)HTTP或JMX與外界交互,本文介紹Spring Boot Actuator的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-02-02
  • Spring集成jedis的配置與使用簡(jiǎn)單實(shí)例

    Spring集成jedis的配置與使用簡(jiǎn)單實(shí)例

    今天小編就為大家分享一篇關(guān)于Spring集成jedis的配置與使用簡(jiǎn)單實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • SpringCloud服務(wù)實(shí)現(xiàn)同時(shí)使用eureka和nacos方法

    SpringCloud服務(wù)實(shí)現(xiàn)同時(shí)使用eureka和nacos方法

    這篇文章主要介紹了SpringCloud服務(wù)實(shí)現(xiàn)同時(shí)使用eureka和nacos方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-01-01
  • 使用Java對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本的查詢(xún)和更新操作

    使用Java對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本的查詢(xún)和更新操作

    這篇文章主要介紹了使用Java對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本的查詢(xún)和更新操作,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • Java 隨機(jī)取字符串的工具類(lèi)

    Java 隨機(jī)取字符串的工具類(lèi)

    隨機(jī)數(shù)在實(shí)際中使用很廣泛,比如要隨即生成一個(gè)固定長(zhǎng)度的字符串、數(shù)字。或者隨即生成一個(gè)不定長(zhǎng)度的數(shù)字、或者進(jìn)行一個(gè)模擬的隨機(jī)選擇等等。Java提供了最基本的工具,可以幫助開(kāi)發(fā)者來(lái)實(shí)現(xiàn)這一切
    2014-01-01
  • Spring、SpringMvc和SpringBoot的區(qū)別及說(shuō)明

    Spring、SpringMvc和SpringBoot的區(qū)別及說(shuō)明

    Spring框架提供了全面的Java開(kāi)發(fā)解決方案,核心包括IOC和AOP,SpringMvc作為其中的WEB層開(kāi)發(fā)框架,通過(guò)復(fù)雜的XML配置管理前端視圖和后臺(tái)邏輯,SpringBoot則簡(jiǎn)化了配置,專(zhuān)注于微服務(wù)接口開(kāi)發(fā),支持嵌入式服務(wù)器,提高了開(kāi)發(fā)效率
    2024-10-10

最新評(píng)論