亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java從入門到起飛之變量與運算符詳解

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

1. 關鍵字

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

說明:

關鍵字一共50個,其中constgoto保留字(reserved word)。

true,falsenull不在其中,它們看起來像關鍵字,其實是字面量,表示特殊的布爾值和空值。

2. 標識符

Java中變量、方法、類等要素命名時使用的字符序列,稱為標識符。

技巧:凡是自己可以起名字的地方都叫標識符。

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

由26個英文字母大小寫,0-9 ,_或 $ 組成
數(shù)字不可以開頭。
不可以使用關鍵字和保留字,但能包含關鍵字和保留字。
Java中嚴格區(qū)分大小寫,長度無限制。
標識符不能包含空格。

3. 變量

3.1 初識變量

  • 變量的概念:

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

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

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

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

  • 使用變量注意:

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

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

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

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

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

3.3 變量的使用

3.3.1 步驟1:變量的聲明

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

//存儲一個小數(shù)類型的體重
double weight;

//存儲一個單字符類型的性別 
char gender;

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

//存儲一個字符串類型的姓名
String name;

//聲明多個同類型的變量
int a,b,c; //表示a,b,c三個變量都是int類型。

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

3.3.2 步驟2:變量的賦值

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

變量賦值的語法格式:

變量名 = 值;

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

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

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

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

3:變量可以反復賦值

//先聲明,后初始化
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ù)類型介紹

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

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

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

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

  • Java的整型常量默認為 int 型。

4.1.1 補充:計算機存儲單位

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

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

  • 轉(zhuǎn)換關系:

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

4.2 浮點類型:float、double

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

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

4.2.1 關于浮點型精度的說明

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

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

  • 測試用例:

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

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

4.3 字符類型:char

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

  • Java中的所有字符都使用Unicode編碼,故一個字符可以存儲一個字母,一個漢字,或其他書面語的一個字符。

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

    • **形式1:**使用單引號(’ ')括起來的單個字符。

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

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

      例如:\u0023 表示 ‘#’。

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

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

    轉(zhuǎn)義字符說明Unicode表示方式
    \n換行符\u000a
    \t制表符\u0009
    \"雙引號\u0022
    \'單引號\u0027
    \\反斜線\u005c
    \b退格符\u0008
    \r回車符\u000d
  • char類型是可以進行運算的。因為它都對應有Unicode碼,可以看做是一個數(shù)值。

4.4 布爾類型:boolean

  • boolean 類型用來判斷邏輯條件,一般用于流程控制語句中:

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

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

boolean isFlag = true;

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

經(jīng)驗之談:

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

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

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

轉(zhuǎn)換的方式有兩種:自動類型提升和強制類型轉(zhuǎn)換。

5.1 自動類型提升

規(guī)則:將取值范圍?。ɑ蛉萘啃。┑念愋妥詣犹嵘秊槿≈捣秶螅ɑ蛉萘看螅┑念愋?。

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

(1)當把存儲范圍小的值(常量值、變量的值、表達式計算的結(jié)果值)賦值給了存儲范圍大的變量時

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

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

(2)當存儲范圍小的數(shù)據(jù)類型與存儲范圍大的數(shù)據(jù)類型變量一起混合運算時,會按照其中最大的類型運算。

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

double sum = i + b + d;//混合運算,升級為double

(3)當byte,short,char數(shù)據(jù)類型的變量進行算術運算時,按照int類型處理。

byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2;//編譯報錯,b1 + b2自動升級為int

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

5.2 強制類型轉(zhuǎn)換

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

int i = 3.14; // 編譯報錯

想要賦值成功,只有通過強制類型轉(zhuǎn)換,將double 類型強制轉(zhuǎn)換成int 類型才能賦值。

規(guī)則:將取值范圍大(或容量大)的類型強制轉(zhuǎn)換成取值范圍?。ɑ蛉萘啃。┑念愋汀?/strong>

自動類型提升是Java自動執(zhí)行的,而強制類型轉(zhuǎn)換是自動類型提升的逆運算,需要我們自己手動執(zhí)行。

轉(zhuǎn)換格式:

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

(1)當把存儲范圍大的值(常量值、變量的值、表達式計算的結(jié)果值)強制轉(zhuǎn)換為存儲范圍小的變量時,可能會損失精度溢出。

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

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

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

(2)當某個值想要提升數(shù)據(jù)類型時,也可以使用強制類型轉(zhuǎn)換。這種情況的強制類型轉(zhuǎn)換是沒有風險的,通常省略。

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

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

long l1 = 123L;
long l2 = 123;//如何理解呢? 此時可以看做是int類型的123自動類型提升為long類型

//long l3 = 123123123123; //報錯,因為123123123123超出了int的范圍。
long l4 = 123123123123L;


//float f1 = 12.3; //報錯,因為12.3看做是double,不能自動轉(zhuǎn)換為float類型
float f2 = 12.3F;
float f3 = (float)12.3;

6 基本數(shù)據(jù)類型與String的運算

6.1 字符串類型:String

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

6.2 運算規(guī)則

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

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;//編譯不通過,因為int類型不能與boolean運算
String s4 = num + (b1 + s1);//編譯通過

2、String類型不能通過強制類型()轉(zhuǎn)換,轉(zhuǎn)為其他的類型

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

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

7. 運算符

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

運算符的分類:

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

7.1 算術運算符

7.1.1 基本語法

舉例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);// 計算機結(jié)果是0,為什么不是0.75呢?
		System.out.println(a % b);// 3
        
        //結(jié)果與被模數(shù)符號相同
        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ù)時1    (-2)*(-2)+1 = 5
		//-5%2  ==>商是-2,余數(shù)是-1   (-2)*2+(-1) = -4-1=-5
	}
}

舉例2:“+”號的兩種用法

  • 第一種:對于+兩邊都是數(shù)值的話,+就是加法的意思
  • 第二種:對于+兩邊至少有一邊是字符串的話,+就是拼接的意思
public class ArithmeticTest2 {
	public static void main(String[] args) {
		// 字符串類型的變量基本使用
		// 數(shù)據(jù)類型 變量名稱 = 數(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:自加自減運算

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

1、單獨使用

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

2、復合使用

  • 和其他變量放在一起使用或者和輸出語句放在一起使用,前++和后++就產(chǎn)生了不同。
  • 變量前++ :變量先自增1,然后再運算。
  • 變量后++ :變量先運算,然后再自增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("==========");
        
		// 和輸出語句一起
		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 賦值運算符

7.2.1 基本語法

  • 符號:=

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

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

		byte bb1 = (byte)i1; //強制類型轉(zhuǎn)換

		int i2 = i1;

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

		//舉例說明+=  -=  *=  /=   %=  
		int m1 = 10;
		m1 += 5; //類似于 m1 = m1 + 5的操作,但不等同于。
		System.out.println(m1);//15
		
		//練習1:開發(fā)中,如何實現(xiàn)一個變量+2的操作呢?
		// += 的操作不會改變變量本身的數(shù)據(jù)類型。其他拓展的運算符也如此。
		//寫法1:推薦
		short s1 = 10;
		s1 += 2; //編譯通過,因為在得到int類型的結(jié)果后,JVM自動完成一步強制類型轉(zhuǎn)換,將int類型強轉(zhuǎn)成short
		System.out.println(s1);//12
		//寫法2:
		short s2 = 10;
		//s2 = s2 + 2;//編譯報錯,因為將int類型的結(jié)果賦值給short類型的變量s時,可能損失精度
		s2 = (short)(s2 + 2);
		System.out.println(s2);


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

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

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

	}
}

7.3 比較(關系)運算符

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

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

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

  • 比較運算符“==”不能誤寫成“=

舉例:

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 邏輯運算符

7.4.1 基本語法

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

  • 運算符說明:

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

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

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

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

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

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

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

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

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

    • 建議:開發(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 位運算符

7.5.1 基本語法

  • 位運算符的運算過程都是基于二進制的補碼運算

(1)左移:<<

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

【注意】當左移的位數(shù)n超過該數(shù)據(jù)類型的總位數(shù)時,相當于左移(n-總位數(shù))位

3<<4  類似于  3*2的4次冪 => 3*16 => 48

在這里插入圖片描述

-3<<4  類似于  -3*2的4次冪 => -3*16 => -48

(2)右移:>>

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

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

69>>4  類似于  69/2的4次 = 69/16 =4

-69>>4  類似于  -69/2的4次 = -69/16 = -5

(3)無符號右移:>>>

運算規(guī)則:往右移動后,左邊空出來的位直接補0。(正數(shù)、負數(shù)都適用)

69>>>4  類似于  69/2的4次 = 69/16 =4

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

(4)按位與:&

運算規(guī)則:對應位都是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)按位或:|

運算規(guī)則:對應位只要有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)按位異或:^

運算規(guī)則:對應位一個為1一個為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)按位取反:~

運算規(guī)則:對應位為1,則結(jié)果為0;對應位為0,則結(jié)果為1。

  • ~0就是1

  • ~1就是0

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

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

7.6 條件運算符

7.6.1 基本語法

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

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

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)換關系

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

  • 開發(fā)中,如果既可以使用條件運算符,又可以使用if-else,推薦使用條件運算符。因為執(zhí)行效率稍高。

//if-else實現(xiàn)獲取兩個數(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ōu)先級

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

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

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

開發(fā)建議:

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

不要把一個表達式寫得過于復雜,如果一個表達式過于復雜,則把它分成幾步來完成。例如:
? (num1 + num2) * 2 > num3 && num2 > num3 ? num3 : num1 + num2;

總結(jié) 

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

相關文章

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

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

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

    深入理解Java之jvm啟動流程

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

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

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

    Java如何實現(xiàn)生成報表并將其導出為Excel

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

    Spring Boot Actuator入門指南

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

    Spring集成jedis的配置與使用簡單實例

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

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

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

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

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

    Java 隨機取字符串的工具類

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

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

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

最新評論