最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java數(shù)據(jù)類(lèi)型、運(yùn)算符和方法重點(diǎn)總結(jié)大全

 更新時(shí)間:2026年02月24日 09:09:28   作者:木井巳  
在大學(xué)Java編程課程中,數(shù)據(jù)類(lèi)型和運(yùn)算符是構(gòu)建程序設(shè)計(jì)邏輯的基石,這篇文章主要介紹了Java數(shù)據(jù)類(lèi)型、運(yùn)算符和方法重點(diǎn)總結(jié)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、數(shù)據(jù)類(lèi)型

1.1 兩種數(shù)據(jù)類(lèi)型

在Java中,數(shù)據(jù)類(lèi)型主要分為 基本數(shù)據(jù)類(lèi)型 和 引用數(shù)據(jù)類(lèi)型 。

1.1.1 基本數(shù)據(jù)類(lèi)型

基本數(shù)據(jù)類(lèi)型共有四類(lèi)八種:

  • 整型:byte, short, int, long,
  • 浮點(diǎn)型:float, double,
  • 字符型:char,
  • 布爾型:boolean

八種基本數(shù)據(jù)類(lèi)型的位數(shù)、取值范圍和默認(rèn)值如下表:

數(shù)據(jù)類(lèi)型占用大小(字節(jié))位數(shù)取值范圍默認(rèn)值描述
byte18-128(-2?)到 127(2?-1)0最小的整數(shù)類(lèi)型,適合用于節(jié)省內(nèi)存的場(chǎng)景
short216-32768(-2¹?)到32767(2¹?-1)0較少使用,通常用于需要節(jié)省內(nèi)存且數(shù)據(jù)范圍在該區(qū)間的場(chǎng)景
int432-2147483648(-2³¹)到2147483647(2³¹-1)0最常用的整數(shù)類(lèi)型,可以滿足大多數(shù)日常編程中整數(shù)計(jì)算的需求,是Java中表示整數(shù)的默認(rèn)類(lèi)型
long864-9223372036854775808(-2?³)到9223372036854775807(2?³-1)0L用于表示非常大的整數(shù),當(dāng) int 類(lèi)型無(wú)法滿足需求時(shí)使用,定義時(shí)需要在數(shù)值后加上 L 或 l
float4321.4E - 45 到 3.4028235E380.0F單精度浮點(diǎn)數(shù),用于表示小數(shù),精度相對(duì)較低,定義時(shí)需要在數(shù)值后加上 F 或 f
double8644.9E - 324 到 1.7976931348623157E3080.0D雙精度浮點(diǎn)數(shù),精度比 float 高,是Java中表示小數(shù)的默認(rèn)類(lèi)型
char216‘\u0000’(0)到 ‘\uffff’(65535)‘\u0000’用于表示單個(gè)字符,采用Unicode編碼,可表示各種語(yǔ)言的字符
boolean無(wú)明確字節(jié)大小無(wú)明確位數(shù)true 或 falsefalse用于邏輯判斷,只有兩個(gè)取值,常用于條件判斷和循環(huán)控制等邏輯場(chǎng)景

需要注意以下幾點(diǎn):

  • 與C/C++不同,無(wú)論在16位系統(tǒng)還是在32位系統(tǒng),int 類(lèi)型都占用4字節(jié),long 類(lèi)型都占用8字節(jié)。
  • 整型數(shù)據(jù)和浮點(diǎn)型數(shù)據(jù)都是默認(rèn)有符號(hào)的。
  • 整型數(shù)據(jù)默認(rèn)是 int ,浮點(diǎn)型數(shù)據(jù)默認(rèn)是 double 。
  • 定義 float 類(lèi)型變量時(shí),賦值的數(shù)字后加上 f ,否則將被認(rèn)為 double 。
  • char 類(lèi)型變量使用 Unicode 表示字符,可以存放整型數(shù)據(jù)和中文字符。
  • boolean 類(lèi)型變量不可以和 int 類(lèi)型相轉(zhuǎn)換,不存在 “1 表示 true,0 表示 false” 。

面試題1:int 和 long 是多少位、多少字節(jié)的?

  • int 類(lèi)型是32位、占4個(gè)字節(jié),是一種有符號(hào)的整數(shù)類(lèi)型,其取值范圍是:-2³¹到2³¹-1。若在一個(gè)簡(jiǎn)單的計(jì)數(shù)器程序中使用 int 類(lèi)型來(lái)存儲(chǔ)計(jì)數(shù)值,可以表示的最大值是 2,147,483,647,超過(guò)這個(gè)值就會(huì)發(fā)生溢出,導(dǎo)致結(jié)果不符合預(yù)期。
  • long 類(lèi)型是64位、占8個(gè)字節(jié),也是一種有符號(hào)的整數(shù)類(lèi)型,其取值范圍比 int 類(lèi)型大,為:-2?³到2?³-1。在處理較大的整數(shù)數(shù)值時(shí),若 int 類(lèi)型不夠用,就可以使用 long 類(lèi)型。如在一個(gè)文件傳輸程序中,文件的大小可能會(huì)很大,此時(shí)使用 int 類(lèi)型很有可能溢出導(dǎo)致數(shù)據(jù)異常,使用 long 類(lèi)型就可以解決。

面試題2:long 和 int 可以互相轉(zhuǎn)換嗎?

  • 在Java中,long 和 int 是可以相互轉(zhuǎn)換的。由于 long 的數(shù)據(jù)范圍比 int 的數(shù)據(jù)范圍大,當(dāng) int 轉(zhuǎn)換為 long 時(shí)是沒(méi)有問(wèn)題的,但是當(dāng) long 轉(zhuǎn)換為 int 時(shí)可能會(huì)發(fā)生截?cái)鄬?dǎo)致的溢出問(wèn)題
  • int(小范圍類(lèi)型)轉(zhuǎn)換成 long(大范圍類(lèi)型)是可以自動(dòng)完成轉(zhuǎn)換的,直接進(jìn)行賦值即可。如:int valInt = 10; long valLong = valInt;
  • long(大范圍類(lèi)型)轉(zhuǎn)換成 int(小范圍類(lèi)型)需要強(qiáng)制手動(dòng)轉(zhuǎn)換,可能導(dǎo)致數(shù)據(jù)溢出。如:long valLong = 10000L; int valInt = (int) valLong;

面試題3:數(shù)據(jù)類(lèi)型的轉(zhuǎn)換方式有哪些?

  • 自動(dòng)類(lèi)型轉(zhuǎn)換(隱式轉(zhuǎn)換):當(dāng)目標(biāo)類(lèi)型的數(shù)值范圍大于原類(lèi)型的數(shù)值范圍時(shí),Java會(huì)自動(dòng)將原類(lèi)型轉(zhuǎn)換為目標(biāo)類(lèi)型,無(wú)需手動(dòng)轉(zhuǎn)換。如:將 int 轉(zhuǎn)換為 long,將 float 轉(zhuǎn)換為 double 等。
  • 強(qiáng)制類(lèi)型轉(zhuǎn)換(顯示轉(zhuǎn)換):當(dāng)目標(biāo)類(lèi)型的數(shù)值范圍小于原類(lèi)型的數(shù)值范圍時(shí),需要手動(dòng)強(qiáng)制轉(zhuǎn)換,語(yǔ)法:目標(biāo)類(lèi)型 變量名稱(chēng) = (目標(biāo)類(lèi)型) 原類(lèi)型變量。由于目標(biāo)類(lèi)型數(shù)值范圍較小,轉(zhuǎn)換后可能導(dǎo)致數(shù)據(jù)丟失或溢出。如:將 long 轉(zhuǎn)換為 int,將 double 轉(zhuǎn)換為 float 等。
  • 字符串轉(zhuǎn)換:Java提供了將字符串表示的數(shù)據(jù)轉(zhuǎn)換為其他類(lèi)型數(shù)據(jù)的方法。如:將字符串轉(zhuǎn)換為 int 類(lèi)型可以使用 Integer.parseInt() 方法;將字符串轉(zhuǎn)換為 double 類(lèi)型可以使用 Double.parseDouble() 方法等。
  • 數(shù)值之間的轉(zhuǎn)換:Java提供了一些數(shù)值類(lèi)型之間的相互轉(zhuǎn)換方法,如將整型轉(zhuǎn)換為字符型,將字符型轉(zhuǎn)換為整型等。這些轉(zhuǎn)換方式可以通過(guò)包裝類(lèi)來(lái)實(shí)現(xiàn)如 Character 類(lèi)、Integer 類(lèi)等提供了相應(yīng)的轉(zhuǎn)換方法。

面試題4:基本數(shù)據(jù)類(lèi)型互相轉(zhuǎn)換會(huì)出現(xiàn)什么問(wèn)題?

  • 當(dāng)小范圍數(shù)據(jù)類(lèi)型轉(zhuǎn)換成大范圍數(shù)據(jù)類(lèi)型:Java會(huì)自動(dòng)進(jìn)行轉(zhuǎn)換,這種轉(zhuǎn)換方式一般不會(huì)出現(xiàn)問(wèn)題,是安全的。
  • 當(dāng)大范圍數(shù)據(jù)類(lèi)型轉(zhuǎn)換成小范圍數(shù)據(jù)類(lèi)型:需要手動(dòng)強(qiáng)行轉(zhuǎn)換,這種轉(zhuǎn)換方式可能會(huì)發(fā)生數(shù)據(jù)溢出或者精度損失的問(wèn)題:前者主要是由于大范圍數(shù)據(jù)在轉(zhuǎn)換成小范圍數(shù)據(jù)的過(guò)程中被截?cái)嗔烁呶蛔止?jié),這將會(huì)導(dǎo)致數(shù)據(jù)錯(cuò)誤;后者是由于浮點(diǎn)數(shù)類(lèi)型數(shù)據(jù)的精度不一致在進(jìn)行轉(zhuǎn)換時(shí)發(fā)生的精度損失,同樣也會(huì)導(dǎo)致數(shù)據(jù)錯(cuò)誤。

1.1.2 引用數(shù)據(jù)類(lèi)型

引用數(shù)據(jù)類(lèi)型不同于基本數(shù)據(jù)類(lèi)型存儲(chǔ)值,它們存儲(chǔ)的是地址

在Java中,字符串、八種基本數(shù)據(jù)類(lèi)型的包裝類(lèi) 和 BigDecimal 是引用數(shù)據(jù)類(lèi)型。

字符串

int 和 字符串間相互轉(zhuǎn)換:

//int轉(zhuǎn)字符串
int num = 10;
String str1 = num + "";               //法1
String str2 = String.valueOf(num);    //法2

//字符串轉(zhuǎn)int
String str = "100";
int n = Integer.parseInt(str);

在這里我們只需要掌握字符串和基本數(shù)據(jù)類(lèi)型的相互轉(zhuǎn)換就可以了。

八種基本數(shù)據(jù)類(lèi)型的對(duì)應(yīng)包裝類(lèi)

包裝類(lèi)的誕生目的:Java中的一些集合要求必須是對(duì)象才能進(jìn)行操作,但是基本數(shù)據(jù)類(lèi)型不是對(duì)象,因此設(shè)計(jì)包裝類(lèi)以解決該矛盾。

// 集合類(lèi)中只能存放對(duì)象元素
List<Integer> list = new ArrayList<>();

包裝類(lèi)的本質(zhì)就是:將基本數(shù)據(jù)類(lèi)型封裝為對(duì)象,使得我們能夠通過(guò)各種方法進(jìn)行操作數(shù)據(jù)

基本數(shù)據(jù)類(lèi)型對(duì)應(yīng)包裝類(lèi)
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
  • 除了 int 和 char ,其他數(shù)據(jù)類(lèi)型的包裝類(lèi)均是原數(shù)據(jù)類(lèi)型名首字母改大寫(xiě)。
  • 由于包裝類(lèi)是引用類(lèi)型數(shù)據(jù)(存放地址),因此值可以為 null,但是基本數(shù)據(jù)類(lèi)型不可以為 null

基本數(shù)據(jù)類(lèi)型和對(duì)應(yīng)包裝類(lèi)的相互轉(zhuǎn)換方式是裝箱和拆箱:

  • 裝箱 是將值類(lèi)型隱式或顯式轉(zhuǎn)換為引用類(lèi)型的操作。 當(dāng)將一個(gè)值類(lèi)型(如int、float)賦值給對(duì)象變量時(shí),系統(tǒng)會(huì)自動(dòng)在堆(Heap)上創(chuàng)建新對(duì)象,復(fù)制原始值到該對(duì)象中,并返回對(duì)象的引用。這相當(dāng)于“包裝”值類(lèi)型成一個(gè)獨(dú)立的對(duì)象。
  • 拆箱 是將引用類(lèi)型顯式轉(zhuǎn)換回值類(lèi)型的操作。它與裝箱相反,系統(tǒng)將從堆上的對(duì)象中提取原始值,復(fù)制到棧內(nèi)存中。拆箱必須顯式指定目標(biāo)類(lèi)型(不像裝箱可能隱式)。
int i = 10;
Integer objInt = i;  // 自動(dòng)裝箱
int j = objInt;  // 自動(dòng)拆箱,也可以顯式定義目標(biāo)類(lèi):(int) objInt

BigDecimal

在基本數(shù)據(jù)類(lèi)型中,浮點(diǎn)數(shù)有 float 和 double,它們?cè)谀承﹫?chǎng)景(如資金計(jì)算)中可能會(huì)出現(xiàn)精度問(wèn)題:

System.out.println(0.05 + 0.01);  // 0.06
System.out.println(1.0 - 0.42);  // 0.58
System.out.println(4.015 * 100);  // 401.5
System.out.println(123.3 / 100);  // 1.233

/*
實(shí)際輸出:
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
*/

因此在涉及到資金問(wèn)題時(shí),我們可以使用Java引進(jìn)的 BigDecimal類(lèi)。

BigDecimal類(lèi)時(shí)Java提供的用于任意精度計(jì)算的類(lèi),在java.math包中

使用BigDecimal來(lái)計(jì)算:

import java.math.BigDecimal

// BigDecimal對(duì)象的創(chuàng)建,注意只能用字符串來(lái)創(chuàng)建,用浮點(diǎn)數(shù)會(huì)存在精度問(wèn)題
BigDecimal a = new BigDecimal("11.1");
BigDecimal b = new BigDecimal("0.8");

// 計(jì)算兩數(shù)之積
System.out.println(b.multiply(a));

// 結(jié)果:8.88

面試題1:裝箱和拆箱是什么?

  • 為了使基本數(shù)據(jù)類(lèi)型能夠用于集合和泛型等需要操作元素為對(duì)象的場(chǎng)景,Java允許通過(guò)“裝箱”和“拆箱”操作實(shí)現(xiàn)基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型(對(duì)象)的相互轉(zhuǎn)換。
  • Java會(huì)在賦值時(shí)會(huì)自動(dòng)進(jìn)行裝箱和拆箱操作。在Java 1.5以后,編譯器支持在給變量賦值時(shí)自動(dòng)進(jìn)行裝箱或拆箱操作。
  • 調(diào)用方法時(shí),編譯器同樣也會(huì)自動(dòng)進(jìn)行裝箱或拆箱操作。
  • 需要注意自動(dòng)裝箱和拆箱有一定的開(kāi)銷(xiāo),在循環(huán)這種重復(fù)同一個(gè)操作的場(chǎng)景不適用,否則性能開(kāi)銷(xiāo)太大。

面試題2:Java為什么有Integer?

  • Integer 是基本數(shù)據(jù)類(lèi)型 int 的包裝類(lèi),即把 int 類(lèi)型數(shù)據(jù)包裝陳 object 對(duì)象。
  • 封裝成對(duì)象有很多好處,可以將數(shù)據(jù)和操作數(shù)據(jù)的方法結(jié)合在一塊。如 Integer 中有 parseInt() 等方法用于專(zhuān)門(mén)處理 int 類(lèi)型數(shù)據(jù)。
  • 此外另一個(gè)原因是Java中一切皆是對(duì)象,集合類(lèi)必須要求首先是對(duì)象才能操作,而基本數(shù)據(jù)類(lèi)型不是對(duì)象,導(dǎo)致集合類(lèi)無(wú)法對(duì)基本數(shù)據(jù)類(lèi)型進(jìn)行處理,因此有包裝類(lèi)是很有必要的。

面試題3:Integer相比int來(lái)說(shuō),有哪些優(yōu)點(diǎn)?

  • Integer作為類(lèi)封裝了很多操作數(shù)據(jù)的方法(parseInt()、compareTo()等),而int只能存儲(chǔ)數(shù)值
  • 支持在集合類(lèi)和泛型中使用:Java的集合框架(如ArrayList、HashMap等)要求存儲(chǔ)對(duì)象而非基本數(shù)據(jù)類(lèi)型,Integer作為對(duì)象可以直接用于集合,而int無(wú)法使用。使用集合能夠高效管理數(shù)據(jù),極大地簡(jiǎn)化數(shù)據(jù)存儲(chǔ)和處理邏輯。
  • 提供自動(dòng)裝箱/拆箱功能:Java提供了自動(dòng)裝箱和自動(dòng)拆箱的機(jī)制,能夠允許基本數(shù)據(jù)類(lèi)型和對(duì)象類(lèi)型隨時(shí)轉(zhuǎn)換,提高了開(kāi)發(fā)的效率。
  • Integer作為對(duì)象成員變量時(shí),默認(rèn)值為 null,能夠明確表示“缺失值
    ”或“未初始化”,避免與零值混淆。當(dāng)對(duì)未初始化的Integer變量進(jìn)行操作時(shí)會(huì)拋出空指針異常。

面試題4:既然Integer這么好用,為什么還要保留int類(lèi)型呢?

  • 性能方面,int類(lèi)型比Integer類(lèi)型要快。int是基本數(shù)據(jù)類(lèi)型,Integer是引用數(shù)據(jù)類(lèi)型。Java中的基本數(shù)據(jù)類(lèi)型是預(yù)定義的,不需要實(shí)例化就可以使用;而引用類(lèi)型數(shù)據(jù)需要實(shí)例化成對(duì)象后才能使用。這意味著,使用int來(lái)存儲(chǔ)一個(gè)整數(shù)時(shí),不需要為其分配額外內(nèi)存,但是使用Integer時(shí)必須為其分配額外內(nèi)存以存儲(chǔ)對(duì)象。因此,int類(lèi)型在讀寫(xiě)方面的效率比Integer類(lèi)型要高效。此外,在進(jìn)行條件比較時(shí),int類(lèi)型可以直接使用“==”來(lái)比較,但是Integer類(lèi)型只能通過(guò)“.equals()或.intValue() ”來(lái)比較,增加了復(fù)雜度。
  • 存儲(chǔ)方面,int類(lèi)型占用的字節(jié)數(shù)比Integer類(lèi)型要少。在64位JVM上,開(kāi)啟引用壓縮情況下,一個(gè)Integer對(duì)象占用至少16字節(jié)的內(nèi)存空間,但是一個(gè)int類(lèi)型數(shù)據(jù)只占用4字節(jié)的內(nèi)存空間。

面試題5:Integer的緩存機(jī)制是什么?

  • 當(dāng)通過(guò)valueOf()方法自動(dòng)裝箱方式創(chuàng)建Integer對(duì)象時(shí),對(duì)于特定范圍內(nèi)的值(默認(rèn)是−128到127),Java會(huì)優(yōu)先從緩存池中返回已有的實(shí)例,而非每次都創(chuàng)建新對(duì)象。這樣做有利于顯著提升小整數(shù)操作效率(尤其在集合類(lèi)中),同時(shí)降低了對(duì)象創(chuàng)建的成本。

面試題6:為什么精確計(jì)算時(shí)使用BigDecimal而不用double?

  • 在涉及精確計(jì)算場(chǎng)景時(shí)通常不使用double的原因在于:計(jì)算機(jī)中的二進(jìn)制浮點(diǎn)數(shù)無(wú)法精確表示十進(jìn)制小數(shù)。double等浮點(diǎn)數(shù)采用IEEE 754標(biāo)準(zhǔn)的二進(jìn)制小數(shù)表示法,部分十進(jìn)制分?jǐn)?shù)在二進(jìn)制中是無(wú)限循環(huán)小數(shù)(如0.1=1/10在二進(jìn)制中是0.0001100110011…),這將會(huì)導(dǎo)致存儲(chǔ)時(shí)被截?cái)唷M瑫r(shí),使用double進(jìn)行連續(xù)計(jì)算時(shí),會(huì)將誤差擴(kuò)大,導(dǎo)致結(jié)果不準(zhǔn)確。
  • BigDecimal在存儲(chǔ)數(shù)值時(shí)采用十進(jìn)制整數(shù)+縮放比例的結(jié)構(gòu),這樣保存的小數(shù)比二進(jìn)制浮點(diǎn)數(shù)要精確。

二、運(yùn)算符

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

Java中的算術(shù)運(yùn)算符有:

  • 四則運(yùn)算符(+ - * / %)
  • 增量運(yùn)算符(+= -= *= /= %=)
  • 自增/自減運(yùn)算符(++ --)。
int a = 20;
int b = 10;

System.out.println(a + b); // 30
System.out.println(a - b); // 10
System.out.println(a * b); // 200
System.out.println(a / b); // 2
System.out.println(a % b); // 0,求余數(shù),得數(shù)為零表示 a 能被 b 整除
 
System.out.println(a += b); // 相當(dāng)于 a = a + b,30
System.out.println(a -= b); // 相當(dāng)于 a = a - b,10
System.out.println(a *= b); // 相當(dāng)于 a = a * b,200
System.out.println(a /= b); // 相當(dāng)于 a = a / b,2
System.out.println(a %= b);// 相當(dāng)于 a = a % b,0
 
System.out.println(a ++);// 先使用 a 再運(yùn)算,相當(dāng)于 a = a + 1,21
System.out.println(a --);// 先使用 a 再運(yùn)算,相當(dāng)于 a = a - 1,19
System.out.println(++ a);// 先運(yùn)算再使用 a ,相當(dāng)于 a = a + 1,21
System.out.println(-- a);// 先運(yùn)算再使用 a ,相當(dāng)于 a = a - 1,19

需要注意的是:

  • 四則運(yùn)算符均是二元運(yùn)算符,必須有兩個(gè)操作數(shù)
  • 除法運(yùn)算的時(shí)候,int 類(lèi)型和 int 類(lèi)型的除法運(yùn)算得到的結(jié)果仍然是 int 類(lèi)型(舍去小數(shù)部分)。
  • 進(jìn)行取模運(yùn)算時(shí),右操作數(shù)不可以是 0 ,并且可以對(duì)浮點(diǎn)型數(shù)據(jù)進(jìn)行取模。
  • 當(dāng)多種類(lèi)型的數(shù)據(jù)進(jìn)行混合運(yùn)算時(shí),結(jié)果會(huì)自動(dòng)向數(shù)據(jù)范圍大的類(lèi)型轉(zhuǎn)型。

2.2 關(guān)系運(yùn)算符

關(guān)系運(yùn)算符主要有:== != < > <= >= 六種,它們的運(yùn)算結(jié)果均是布爾值

int a = 10;
int b = 20;

System.out.println(a == b);    // 對(duì)于基本數(shù)據(jù)類(lèi)型來(lái)說(shuō),比較的是數(shù)值,false
System.out.println(a != b);    // true
System.out.println(a < b);     // true
System.out.println(a > b);     // false
System.out.println(a <= b);    // true
System.out.println(a >= b);    // false

面試題:Java中的“==”和 equals()方法有什么區(qū)別?

  • ==:用于比較基本數(shù)據(jù)類(lèi)型時(shí),比較的是兩個(gè)數(shù)據(jù)的數(shù)值大小;用于比較引用數(shù)據(jù)類(lèi)型(對(duì)象)的時(shí)候,比較的是兩個(gè)引用存儲(chǔ)的地址,若地址相同說(shuō)明兩個(gè)引用指向的是同一個(gè)對(duì)象。
  • equals():源自O(shè)bject類(lèi)的方法,很多類(lèi)重寫(xiě)了該方法使其能夠?qū)σ脭?shù)據(jù)類(lèi)型進(jìn)行內(nèi)容的比較。

2.3 邏輯運(yùn)算符

邏輯運(yùn)算符主要有:&& || ! ,它們的運(yùn)算結(jié)果均是布爾值true或false。

其中,&&和 || 兩個(gè)運(yùn)算符是二元運(yùn)算符,必須有兩個(gè)操作數(shù);!是一元運(yùn)算符,只需要一個(gè)操作數(shù)即可。

它們的邏輯功能如下:

  • 邏輯與&&:兩個(gè)表達(dá)式都是真(true)結(jié)果才是真(true),否則結(jié)果均是假(false)。
  • 邏輯或||:兩個(gè)表達(dá)式都是假(false)結(jié)果才是假(false),否則結(jié)果均是真(true)。
  • 邏輯非!:真變假,假變真。

短路現(xiàn)象:

  • 當(dāng)&&左側(cè)表達(dá)式的值是false時(shí),整個(gè)結(jié)果一定是false,此時(shí)右側(cè)表達(dá)式不會(huì)被執(zhí)行;
  • 當(dāng) || 左側(cè)表達(dá)式的值是true時(shí),整個(gè)結(jié)果一定是true,此時(shí)右側(cè)表達(dá)式不會(huì)被執(zhí)行。

2.4 位運(yùn)算符

位運(yùn)算符主要包括:& | ~ ^ ,除了 ~ 是一元運(yùn)算符,其余都是二元運(yùn)算符。

按位運(yùn)算就是以二進(jìn)制位進(jìn)行運(yùn)算。

  • 按位與 & :如果兩個(gè)二進(jìn)制位都是1,則結(jié)果也是1,否則為0。
  • 按位或 | : 如果兩個(gè)二進(jìn)制位都是0,則結(jié)果也是0,否則為1。
  • 按位取反 ~ :1變0,0變1。
  • 按位異或 ^ : 如果兩個(gè)二進(jìn)制位數(shù)字相同,則結(jié)果是0,否則為1。

注意:

  • 以0x開(kāi)頭的數(shù)字是十六進(jìn)制數(shù)字,0xf表示十六進(jìn)制數(shù)字15,換算成二進(jìn)制數(shù)字是1111。
  • 按位與 & 和按位或 | 不支持短路求值。

2.5 移位運(yùn)算符

移位運(yùn)算符主要有三個(gè):<< >> >>> ,且全部都是二元運(yùn)算符,都是按照二進(jìn)制位運(yùn)算的。

  • 左移運(yùn)算符 << :將二進(jìn)制位的最左側(cè)的數(shù)去掉,右側(cè)補(bǔ)0。(正負(fù)可能改變)
  • 右移運(yùn)算符 >> :將二進(jìn)制位的最右側(cè)的數(shù)去掉,左側(cè)補(bǔ)0(正數(shù))或1(負(fù)數(shù))。
  • 無(wú)符號(hào)右移運(yùn)算符 >>> :將二進(jìn)制位的最右側(cè)的數(shù)去掉,左側(cè)補(bǔ)0。
    注意:

左移一位,相當(dāng)于該數(shù) * 2;左移 N 位,相當(dāng)于該數(shù) * 2的 N 次方。
右移一位,相當(dāng)于該數(shù) / 2;右移 N 位,相當(dāng)于該數(shù) / 2的 N 次方。

2.6 條件運(yùn)算符

條件運(yùn)算符是一個(gè)三目運(yùn)算符,其形式是:表達(dá)式1 ?表達(dá)式2 : 表達(dá)式3。

它的運(yùn)算邏輯是:判斷表達(dá)式1的真值,若真值為1就返回表達(dá)式2,否則返回表達(dá)式3

int a = 10;
int b = 20;

int max = a>b ? a : b;    //返回a和b的最大值
System.out.println(max); // 返回 20

三、方法

3.1 方法的定義

若某一個(gè)問(wèn)題頻繁出現(xiàn),每一次都要寫(xiě)一遍代碼那么效率簡(jiǎn)直太低了。

對(duì)于類(lèi)似的問(wèn)題,往往會(huì)將解決該類(lèi)問(wèn)題的代碼封裝在一個(gè)小黑盒——這個(gè)盒子就是方法,每當(dāng)需要解決這種問(wèn)題的時(shí)候就可以調(diào)用這個(gè)方法來(lái)解決。

方法就是用于解決特定問(wèn)題的東西,和C語(yǔ)言中的函數(shù)是一個(gè)性質(zhì)。

方法定義格式:

修飾符 返回值類(lèi)型 方法名稱(chēng)([參數(shù)類(lèi)型 形參 ...]){
方法體代碼;
[return 返回值];
}

例如下面的一個(gè)用于實(shí)現(xiàn)判斷閏年的方法:

public static boolean IsLeapYear(int year) {    //判斷閏年
        if((year%4==0 && year%100!=0) || year%400==0) {
            return true;
        } else {
            return false;
        }
}

public static void main(String[] args) {
    int year = 2000;
    if(IsLeapYear(year)) {
        System.out.println("Yes");
    } else {
        System.out.println("No");
    }
}

方法的形參和調(diào)用方法時(shí)傳入的實(shí)參這兩個(gè)的內(nèi)存不一樣,形參是實(shí)參的一份拷貝。

public static void swap(int x, int y) {
    int t = x;
    x = y;
    y = t;
}

public static void main(String[] args) {
    int a = 10;
    int b = 20;
    System.out.println("a = "+a+" b = "+b);
    swap(a,b);
    System.out.println("a = "+a+" b = "+b);
}

調(diào)用方法 swap 可以發(fā)現(xiàn),兩次打印 a 和 b 的值都是一樣的,說(shuō)明 swap 方法沒(méi)有成功將兩數(shù)的值進(jìn)行交換,從而證明了改變形式參數(shù)并不能夠影響實(shí)際參數(shù)的值。

只需要將形參和實(shí)參的類(lèi)型換成 引用類(lèi)型 即可,如數(shù)組。

public static void swap(int[] arr) {
    int t = arr[0];
    arr[0] = arr[1];
    arr[1] = t;
}

public static void main(String[] args) {
    int[] arr = {10,20};
    System.out.println("arr[0] = "+arr[0]+" arr[1] = "+arr[1]);
    swap(arr);
    System.out.println("arr[0] = "+arr[0]+" arr[1] = "+arr[1]);
}

3.2 方法重載

Java中,經(jīng)常使用IDEA的方法但是能夠發(fā)現(xiàn)同一個(gè)名字有多個(gè)方法:

這就是方法重載,具有以下特點(diǎn):

  • 方法名相同
  • 參數(shù)列表(參數(shù)的個(gè)數(shù)/類(lèi)型/順序)不同
  • 返回值可能相同也可能不相同。

總結(jié)

到此這篇關(guān)于Java數(shù)據(jù)類(lèi)型、運(yùn)算符和方法重點(diǎn)總結(jié)的文章就介紹到這了,更多相關(guān)Java數(shù)據(jù)類(lèi)型、運(yùn)算符和方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • protobuf簡(jiǎn)介及使用流程

    protobuf簡(jiǎn)介及使用流程

    本文介紹了Protocol Buffers(protobuf)的數(shù)據(jù)結(jié)構(gòu)序列化和反序列化框架,包括其特點(diǎn)、使用流程和快速上手,通過(guò)一個(gè)簡(jiǎn)單的通訊錄示例,展示了如何創(chuàng)建.proto文件、添加注釋、編寫(xiě)消息定義、編譯.proto文件以及進(jìn)行序列化和反序列化操作,感興趣的朋友一起看看吧
    2025-02-02
  • 關(guān)于各種排列組合java算法實(shí)現(xiàn)方法

    關(guān)于各種排列組合java算法實(shí)現(xiàn)方法

    這篇文章介紹了幾種用JAVA實(shí)現(xiàn)的排列組合算法,有需要的朋友可以參考一下
    2013-06-06
  • SpringBoot中9個(gè)內(nèi)置過(guò)濾器用法的完整指南

    SpringBoot中9個(gè)內(nèi)置過(guò)濾器用法的完整指南

    這篇文章主要為大家詳細(xì)介紹了SpringBoot中9個(gè)內(nèi)置過(guò)濾器用法的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一
    2025-08-08
  • java 裝飾模式(Decorator Pattern)詳解及實(shí)例代碼

    java 裝飾模式(Decorator Pattern)詳解及實(shí)例代碼

    裝飾器模式(Decorator Pattern)允許向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。這種類(lèi)型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類(lèi)的一個(gè)包裝
    2016-10-10
  • SpringBoot使用@Async注解實(shí)現(xiàn)異步調(diào)用

    SpringBoot使用@Async注解實(shí)現(xiàn)異步調(diào)用

    這篇文章主要介紹了SpringBoot使用@Async注解實(shí)現(xiàn)異步調(diào)用,異步調(diào)用是相對(duì)于同步調(diào)用而言的,同步調(diào)用是指程序按預(yù)定順序一步步執(zhí)行,每一步必須等到上一步執(zhí)行完后才能執(zhí)行,異步調(diào)用則無(wú)需等待,程序執(zhí)行完即可執(zhí)行,可以減少程序執(zhí)行時(shí)間,需要的朋友可以參考下
    2023-10-10
  • MyBatis實(shí)戰(zhàn)之動(dòng)態(tài)生成SQL詳解

    MyBatis實(shí)戰(zhàn)之動(dòng)態(tài)生成SQL詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用MyBatis實(shí)現(xiàn)動(dòng)態(tài)生成SQL,可以告別硬編碼,擁抱智能SQL生成,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-07-07
  • Maven如何手動(dòng)安裝依賴(lài)到本地倉(cāng)庫(kù)

    Maven如何手動(dòng)安裝依賴(lài)到本地倉(cāng)庫(kù)

    這篇文章主要介紹了Maven如何手動(dòng)安裝依賴(lài)到本地倉(cāng)庫(kù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • JVM 命令行工具的使用

    JVM 命令行工具的使用

    造成Java應(yīng)用出現(xiàn)性能問(wèn)題的因素非常多,想要定位這些問(wèn)題,一款優(yōu)秀的性能診斷工具必不可少,本文主要介紹了JVM 命令行工具的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • Java技巧分享之利用RxJava打造可觀測(cè)數(shù)據(jù)RxLiveData

    Java技巧分享之利用RxJava打造可觀測(cè)數(shù)據(jù)RxLiveData

    這篇文章主要來(lái)和大家分享一個(gè)Java技巧,那就是利用RxJava打造可觀測(cè)數(shù)據(jù)RxLiveData,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-06-06
  • jdbc中class.forname的作用

    jdbc中class.forname的作用

    這篇文章主要介紹了jdbc中class.forname的作用,使用示例說(shuō)明了他作用及使用方法,大家參考使用吧
    2014-01-01

最新評(píng)論

德昌县| 武城县| 金门县| 东台市| 云安县| 奎屯市| 涞水县| 深水埗区| 镶黄旗| 留坝县| 乐安县| 延边| 巢湖市| 临泽县| 莆田市| 兴化市| 邻水| 平潭县| 安塞县| 潮州市| 建水县| 永胜县| 竹山县| 清水县| 资兴市| 桐城市| 江川县| 德格县| 仁布县| 双柏县| 丰宁| 广水市| 大名县| 金湖县| 昌邑市| 西乌珠穆沁旗| 大竹县| 固始县| 宁乡县| 东兰县| 广宁县|