Java數(shù)據(jù)類型、運(yùn)算符和方法重點(diǎn)總結(jié)大全
一、數(shù)據(jù)類型
1.1 兩種數(shù)據(jù)類型
在Java中,數(shù)據(jù)類型主要分為 基本數(shù)據(jù)類型 和 引用數(shù)據(jù)類型 。
1.1.1 基本數(shù)據(jù)類型
基本數(shù)據(jù)類型共有四類八種:
- 整型:byte, short, int, long,
- 浮點(diǎn)型:float, double,
- 字符型:char,
- 布爾型:boolean
八種基本數(shù)據(jù)類型的位數(shù)、取值范圍和默認(rèn)值如下表:
| 數(shù)據(jù)類型 | 占用大?。ㄗ止?jié)) | 位數(shù) | 取值范圍 | 默認(rèn)值 | 描述 |
|---|---|---|---|---|---|
| byte | 1 | 8 | -128(-2?)到 127(2?-1) | 0 | 最小的整數(shù)類型,適合用于節(jié)省內(nèi)存的場景 |
| short | 2 | 16 | -32768(-2¹?)到32767(2¹?-1) | 0 | 較少使用,通常用于需要節(jié)省內(nèi)存且數(shù)據(jù)范圍在該區(qū)間的場景 |
| int | 4 | 32 | -2147483648(-2³¹)到2147483647(2³¹-1) | 0 | 最常用的整數(shù)類型,可以滿足大多數(shù)日常編程中整數(shù)計(jì)算的需求,是Java中表示整數(shù)的默認(rèn)類型 |
| long | 8 | 64 | -9223372036854775808(-2?³)到9223372036854775807(2?³-1) | 0L | 用于表示非常大的整數(shù),當(dāng) int 類型無法滿足需求時(shí)使用,定義時(shí)需要在數(shù)值后加上 L 或 l |
| float | 4 | 32 | 1.4E - 45 到 3.4028235E38 | 0.0F | 單精度浮點(diǎn)數(shù),用于表示小數(shù),精度相對較低,定義時(shí)需要在數(shù)值后加上 F 或 f |
| double | 8 | 64 | 4.9E - 324 到 1.7976931348623157E308 | 0.0D | 雙精度浮點(diǎn)數(shù),精度比 float 高,是Java中表示小數(shù)的默認(rèn)類型 |
| char | 2 | 16 | ‘\u0000’(0)到 ‘\uffff’(65535) | ‘\u0000’ | 用于表示單個(gè)字符,采用Unicode編碼,可表示各種語言的字符 |
| boolean | 無明確字節(jié)大小 | 無明確位數(shù) | true 或 false | false | 用于邏輯判斷,只有兩個(gè)取值,常用于條件判斷和循環(huán)控制等邏輯場景 |
需要注意以下幾點(diǎn):
- 與C/C++不同,無論在16位系統(tǒng)還是在32位系統(tǒng),int 類型都占用4字節(jié),long 類型都占用8字節(jié)。
- 整型數(shù)據(jù)和浮點(diǎn)型數(shù)據(jù)都是默認(rèn)有符號的。
- 整型數(shù)據(jù)默認(rèn)是 int ,浮點(diǎn)型數(shù)據(jù)默認(rèn)是 double 。
- 定義 float 類型變量時(shí),賦值的數(shù)字后加上 f ,否則將被認(rèn)為 double 。
- char 類型變量使用 Unicode 表示字符,可以存放整型數(shù)據(jù)和中文字符。
- boolean 類型變量不可以和 int 類型相轉(zhuǎn)換,不存在 “1 表示 true,0 表示 false” 。
面試題1:int 和 long 是多少位、多少字節(jié)的?
- int 類型是32位、占4個(gè)字節(jié),是一種有符號的整數(shù)類型,其取值范圍是:-2³¹到2³¹-1。若在一個(gè)簡單的計(jì)數(shù)器程序中使用 int 類型來存儲計(jì)數(shù)值,可以表示的最大值是 2,147,483,647,超過這個(gè)值就會發(fā)生溢出,導(dǎo)致結(jié)果不符合預(yù)期。
- long 類型是64位、占8個(gè)字節(jié),也是一種有符號的整數(shù)類型,其取值范圍比 int 類型大,為:-2?³到2?³-1。在處理較大的整數(shù)數(shù)值時(shí),若 int 類型不夠用,就可以使用 long 類型。如在一個(gè)文件傳輸程序中,文件的大小可能會很大,此時(shí)使用 int 類型很有可能溢出導(dǎo)致數(shù)據(jù)異常,使用 long 類型就可以解決。
面試題2:long 和 int 可以互相轉(zhuǎn)換嗎?
- 在Java中,long 和 int 是可以相互轉(zhuǎn)換的。由于 long 的數(shù)據(jù)范圍比 int 的數(shù)據(jù)范圍大,當(dāng) int 轉(zhuǎn)換為 long 時(shí)是沒有問題的,但是當(dāng) long 轉(zhuǎn)換為 int 時(shí)可能會發(fā)生截?cái)鄬?dǎo)致的溢出問題
- int(小范圍類型)轉(zhuǎn)換成 long(大范圍類型)是可以自動(dòng)完成轉(zhuǎn)換的,直接進(jìn)行賦值即可。如:int valInt = 10; long valLong = valInt;
- long(大范圍類型)轉(zhuǎn)換成 int(小范圍類型)需要強(qiáng)制手動(dòng)轉(zhuǎn)換,可能導(dǎo)致數(shù)據(jù)溢出。如:long valLong = 10000L; int valInt = (int) valLong;
面試題3:數(shù)據(jù)類型的轉(zhuǎn)換方式有哪些?
- 自動(dòng)類型轉(zhuǎn)換(隱式轉(zhuǎn)換):當(dāng)目標(biāo)類型的數(shù)值范圍大于原類型的數(shù)值范圍時(shí),Java會自動(dòng)將原類型轉(zhuǎn)換為目標(biāo)類型,無需手動(dòng)轉(zhuǎn)換。如:將 int 轉(zhuǎn)換為 long,將 float 轉(zhuǎn)換為 double 等。
- 強(qiáng)制類型轉(zhuǎn)換(顯示轉(zhuǎn)換):當(dāng)目標(biāo)類型的數(shù)值范圍小于原類型的數(shù)值范圍時(shí),需要手動(dòng)強(qiáng)制轉(zhuǎn)換,語法:目標(biāo)類型 變量名稱 = (目標(biāo)類型) 原類型變量。由于目標(biāo)類型數(shù)值范圍較小,轉(zhuǎn)換后可能導(dǎo)致數(shù)據(jù)丟失或溢出。如:將 long 轉(zhuǎn)換為 int,將 double 轉(zhuǎn)換為 float 等。
- 字符串轉(zhuǎn)換:Java提供了將字符串表示的數(shù)據(jù)轉(zhuǎn)換為其他類型數(shù)據(jù)的方法。如:將字符串轉(zhuǎn)換為 int 類型可以使用 Integer.parseInt() 方法;將字符串轉(zhuǎn)換為 double 類型可以使用 Double.parseDouble() 方法等。
- 數(shù)值之間的轉(zhuǎn)換:Java提供了一些數(shù)值類型之間的相互轉(zhuǎn)換方法,如將整型轉(zhuǎn)換為字符型,將字符型轉(zhuǎn)換為整型等。這些轉(zhuǎn)換方式可以通過包裝類來實(shí)現(xiàn)如 Character 類、Integer 類等提供了相應(yīng)的轉(zhuǎn)換方法。
面試題4:基本數(shù)據(jù)類型互相轉(zhuǎn)換會出現(xiàn)什么問題?
- 當(dāng)小范圍數(shù)據(jù)類型轉(zhuǎn)換成大范圍數(shù)據(jù)類型:Java會自動(dòng)進(jìn)行轉(zhuǎn)換,這種轉(zhuǎn)換方式一般不會出現(xiàn)問題,是安全的。
- 當(dāng)大范圍數(shù)據(jù)類型轉(zhuǎn)換成小范圍數(shù)據(jù)類型:需要手動(dòng)強(qiáng)行轉(zhuǎn)換,這種轉(zhuǎn)換方式可能會發(fā)生數(shù)據(jù)溢出或者精度損失的問題:前者主要是由于大范圍數(shù)據(jù)在轉(zhuǎn)換成小范圍數(shù)據(jù)的過程中被截?cái)嗔烁呶蛔止?jié),這將會導(dǎo)致數(shù)據(jù)錯(cuò)誤;后者是由于浮點(diǎn)數(shù)類型數(shù)據(jù)的精度不一致在進(jìn)行轉(zhuǎn)換時(shí)發(fā)生的精度損失,同樣也會導(dǎo)致數(shù)據(jù)錯(cuò)誤。
1.1.2 引用數(shù)據(jù)類型
引用數(shù)據(jù)類型不同于基本數(shù)據(jù)類型存儲值,它們存儲的是地址
在Java中,字符串、八種基本數(shù)據(jù)類型的包裝類 和 BigDecimal 是引用數(shù)據(jù)類型。
字符串
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ù)類型的相互轉(zhuǎn)換就可以了。
八種基本數(shù)據(jù)類型的對應(yīng)包裝類
包裝類的誕生目的:Java中的一些集合要求必須是對象才能進(jìn)行操作,但是基本數(shù)據(jù)類型不是對象,因此設(shè)計(jì)包裝類以解決該矛盾。
// 集合類中只能存放對象元素 List<Integer> list = new ArrayList<>();
包裝類的本質(zhì)就是:將基本數(shù)據(jù)類型封裝為對象,使得我們能夠通過各種方法進(jìn)行操作數(shù)據(jù)
| 基本數(shù)據(jù)類型 | 對應(yīng)包裝類 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
- 除了 int 和 char ,其他數(shù)據(jù)類型的包裝類均是原數(shù)據(jù)類型名首字母改大寫。
- 由于包裝類是引用類型數(shù)據(jù)(存放地址),因此值可以為 null,但是基本數(shù)據(jù)類型不可以為 null
基本數(shù)據(jù)類型和對應(yīng)包裝類的相互轉(zhuǎn)換方式是裝箱和拆箱:
- 裝箱 是將值類型隱式或顯式轉(zhuǎn)換為引用類型的操作。 當(dāng)將一個(gè)值類型(如int、float)賦值給對象變量時(shí),系統(tǒng)會自動(dòng)在堆(Heap)上創(chuàng)建新對象,復(fù)制原始值到該對象中,并返回對象的引用。這相當(dāng)于“包裝”值類型成一個(gè)獨(dú)立的對象。
- 拆箱 是將引用類型顯式轉(zhuǎn)換回值類型的操作。它與裝箱相反,系統(tǒng)將從堆上的對象中提取原始值,復(fù)制到棧內(nèi)存中。拆箱必須顯式指定目標(biāo)類型(不像裝箱可能隱式)。
int i = 10; Integer objInt = i; // 自動(dòng)裝箱 int j = objInt; // 自動(dòng)拆箱,也可以顯式定義目標(biāo)類:(int) objInt
BigDecimal
在基本數(shù)據(jù)類型中,浮點(diǎn)數(shù)有 float 和 double,它們在某些場景(如資金計(jì)算)中可能會出現(xià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 */
因此在涉及到資金問題時(shí),我們可以使用Java引進(jìn)的 BigDecimal類。
BigDecimal類時(shí)Java提供的用于任意精度計(jì)算的類,在java.math包中
使用BigDecimal來計(jì)算:
import java.math.BigDecimal
// BigDecimal對象的創(chuàng)建,注意只能用字符串來創(chuàng)建,用浮點(diǎn)數(shù)會存在精度問題
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ù)類型能夠用于集合和泛型等需要操作元素為對象的場景,Java允許通過“裝箱”和“拆箱”操作實(shí)現(xiàn)基本數(shù)據(jù)類型和引用數(shù)據(jù)類型(對象)的相互轉(zhuǎn)換。
- Java會在賦值時(shí)會自動(dòng)進(jìn)行裝箱和拆箱操作。在Java 1.5以后,編譯器支持在給變量賦值時(shí)自動(dòng)進(jìn)行裝箱或拆箱操作。
- 在調(diào)用方法時(shí),編譯器同樣也會自動(dòng)進(jìn)行裝箱或拆箱操作。
- 需要注意自動(dòng)裝箱和拆箱有一定的開銷,在循環(huán)這種重復(fù)同一個(gè)操作的場景不適用,否則性能開銷太大。
面試題2:Java為什么有Integer?
- Integer 是基本數(shù)據(jù)類型 int 的包裝類,即把 int 類型數(shù)據(jù)包裝陳 object 對象。
- 封裝成對象有很多好處,可以將數(shù)據(jù)和操作數(shù)據(jù)的方法結(jié)合在一塊。如 Integer 中有 parseInt() 等方法用于專門處理 int 類型數(shù)據(jù)。
- 此外另一個(gè)原因是Java中一切皆是對象,集合類必須要求首先是對象才能操作,而基本數(shù)據(jù)類型不是對象,導(dǎo)致集合類無法對基本數(shù)據(jù)類型進(jìn)行處理,因此有包裝類是很有必要的。
面試題3:Integer相比int來說,有哪些優(yōu)點(diǎn)?
- Integer作為類封裝了很多操作數(shù)據(jù)的方法(parseInt()、compareTo()等),而int只能存儲數(shù)值
- 支持在集合類和泛型中使用:Java的集合框架(如ArrayList、HashMap等)要求存儲對象而非基本數(shù)據(jù)類型,Integer作為對象可以直接用于集合,而int無法使用。使用集合能夠高效管理數(shù)據(jù),極大地簡化數(shù)據(jù)存儲和處理邏輯。
- 提供自動(dòng)裝箱/拆箱功能:Java提供了自動(dòng)裝箱和自動(dòng)拆箱的機(jī)制,能夠允許基本數(shù)據(jù)類型和對象類型隨時(shí)轉(zhuǎn)換,提高了開發(fā)的效率。
- Integer作為對象成員變量時(shí),默認(rèn)值為 null,能夠明確表示“缺失值
”或“未初始化”,避免與零值混淆。當(dāng)對未初始化的Integer變量進(jìn)行操作時(shí)會拋出空指針異常。
面試題4:既然Integer這么好用,為什么還要保留int類型呢?
- 性能方面,int類型比Integer類型要快。int是基本數(shù)據(jù)類型,Integer是引用數(shù)據(jù)類型。Java中的基本數(shù)據(jù)類型是預(yù)定義的,不需要實(shí)例化就可以使用;而引用類型數(shù)據(jù)需要實(shí)例化成對象后才能使用。這意味著,使用int來存儲一個(gè)整數(shù)時(shí),不需要為其分配額外內(nèi)存,但是使用Integer時(shí)必須為其分配額外內(nèi)存以存儲對象。因此,int類型在讀寫方面的效率比Integer類型要高效。此外,在進(jìn)行條件比較時(shí),int類型可以直接使用“==”來比較,但是Integer類型只能通過“.equals()或.intValue() ”來比較,增加了復(fù)雜度。
- 存儲方面,int類型占用的字節(jié)數(shù)比Integer類型要少。在64位JVM上,開啟引用壓縮情況下,一個(gè)Integer對象占用至少16字節(jié)的內(nèi)存空間,但是一個(gè)int類型數(shù)據(jù)只占用4字節(jié)的內(nèi)存空間。
面試題5:Integer的緩存機(jī)制是什么?
- 當(dāng)通過
valueOf()方法或自動(dòng)裝箱方式創(chuàng)建Integer對象時(shí),對于特定范圍內(nèi)的值(默認(rèn)是−128到127),Java會優(yōu)先從緩存池中返回已有的實(shí)例,而非每次都創(chuàng)建新對象。這樣做有利于顯著提升小整數(shù)操作效率(尤其在集合類中),同時(shí)降低了對象創(chuàng)建的成本。
面試題6:為什么精確計(jì)算時(shí)使用BigDecimal而不用double?
- 在涉及精確計(jì)算場景時(shí)通常不使用double的原因在于:計(jì)算機(jī)中的二進(jìn)制浮點(diǎn)數(shù)無法精確表示十進(jìn)制小數(shù)。double等浮點(diǎn)數(shù)采用IEEE 754標(biāo)準(zhǔn)的二進(jìn)制小數(shù)表示法,部分十進(jìn)制分?jǐn)?shù)在二進(jìn)制中是無限循環(huán)小數(shù)(如0.1=1/10在二進(jìn)制中是0.0001100110011…),這將會導(dǎo)致存儲時(shí)被截?cái)?。同時(shí),使用double進(jìn)行連續(xù)計(jì)算時(shí),會將誤差擴(kuò)大,導(dǎo)致結(jié)果不準(zhǔn)確。
- BigDecimal在存儲數(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 類型和 int 類型的除法運(yùn)算得到的結(jié)果仍然是 int 類型(舍去小數(shù)部分)。
- 進(jìn)行取模運(yùn)算時(shí),右操作數(shù)不可以是 0 ,并且可以對浮點(diǎn)型數(shù)據(jù)進(jìn)行取模。
- 當(dāng)多種類型的數(shù)據(jù)進(jìn)行混合運(yùn)算時(shí),結(jié)果會自動(dòng)向數(shù)據(jù)范圍大的類型轉(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); // 對于基本數(shù)據(jù)類型來說,比較的是數(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ù)類型時(shí),比較的是兩個(gè)數(shù)據(jù)的數(shù)值大小;用于比較引用數(shù)據(jù)類型(對象)的時(shí)候,比較的是兩個(gè)引用存儲的地址,若地址相同說明兩個(gè)引用指向的是同一個(gè)對象。
- equals():源自O(shè)bject類的方法,很多類重寫了該方法使其能夠?qū)σ脭?shù)據(jù)類型進(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á)式不會被執(zhí)行;
- 當(dāng) || 左側(cè)表達(dá)式的值是true時(shí),整個(gè)結(jié)果一定是true,此時(shí)右側(cè)表達(dá)式不會被執(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開頭的數(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ù))。
- 無符號右移運(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è)問題頻繁出現(xiàn),每一次都要寫一遍代碼那么效率簡直太低了。
對于類似的問題,往往會將解決該類問題的代碼封裝在一個(gè)小黑盒——這個(gè)盒子就是方法,每當(dāng)需要解決這種問題的時(shí)候就可以調(diào)用這個(gè)方法來解決。
方法就是用于解決特定問題的東西,和C語言中的函數(shù)是一個(gè)性質(zhì)。
方法定義格式:
修飾符 返回值類型 方法名稱([參數(shù)類型 形參 ...]){
方法體代碼;
[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 的值都是一樣的,說明 swap 方法沒有成功將兩數(shù)的值進(jìn)行交換,從而證明了改變形式參數(shù)并不能夠影響實(shí)際參數(shù)的值。
只需要將形參和實(shí)參的類型換成 引用類型 即可,如數(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ù)/類型/順序)不同
- 返回值可能相同也可能不相同。
總結(jié)
到此這篇關(guān)于Java數(shù)據(jù)類型、運(yùn)算符和方法重點(diǎn)總結(jié)的文章就介紹到這了,更多相關(guān)Java數(shù)據(jù)類型、運(yùn)算符和方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于各種排列組合java算法實(shí)現(xiàn)方法
這篇文章介紹了幾種用JAVA實(shí)現(xiàn)的排列組合算法,有需要的朋友可以參考一下2013-06-06
SpringBoot中9個(gè)內(nèi)置過濾器用法的完整指南
這篇文章主要為大家詳細(xì)介紹了SpringBoot中9個(gè)內(nèi)置過濾器用法的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一2025-08-08
java 裝飾模式(Decorator Pattern)詳解及實(shí)例代碼
裝飾器模式(Decorator Pattern)允許向一個(gè)現(xiàn)有的對象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個(gè)包裝2016-10-10
SpringBoot使用@Async注解實(shí)現(xiàn)異步調(diào)用
這篇文章主要介紹了SpringBoot使用@Async注解實(shí)現(xiàn)異步調(diào)用,異步調(diào)用是相對于同步調(diào)用而言的,同步調(diào)用是指程序按預(yù)定順序一步步執(zhí)行,每一步必須等到上一步執(zhí)行完后才能執(zhí)行,異步調(diào)用則無需等待,程序執(zhí)行完即可執(zhí)行,可以減少程序執(zhí)行時(shí)間,需要的朋友可以參考下2023-10-10
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
Java技巧分享之利用RxJava打造可觀測數(shù)據(jù)RxLiveData
這篇文章主要來和大家分享一個(gè)Java技巧,那就是利用RxJava打造可觀測數(shù)據(jù)RxLiveData,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-06-06

