Java中int和char之間的轉換
一、概述
在本教程中,我們將了解如何在 Java 中將int
轉換為char
並返回。
2. Java 中的char
我們將簡要討論字符的表示方式,以便更好地理解我們將在本文後面看到的代碼。
在內部, Java 將每個char
存儲為 16 位 Unicode 編碼值:
特點 | 2字節 | 十進制(以 10 為底) | 十六進制(基數 16) |
---|---|---|---|
一個 | 00000000 01000001 | 65 | 41 |
一個 | 00000000 01100001 | 61 | 97 |
1個 | 00000000 00110001 | 49 | 31 |
Z | 00000000 01011010 | 90後 | 5A |
我們可以通過將char
值轉換為int
來輕鬆地檢查這一點:
assertEquals(65, (int)'A');
ASCII 碼是 Unicode 編碼的一個子集,主要代表英文字母表。
3. int
轉char
假設我們有一個值為 7 的int
變量,我們想將其轉換為對應的char
類型“ 7
”。我們有幾個選項可以做到這一點。
簡單地將它轉換為char
是行不通的,因為這會將它轉換為二進製表示的字符0111
,
在 UTF-16 中是U+0007
或字符'BELL' 。
3.1.抵消“0”
UTF-16 中的字符按順序表示。所以我們可以將“ 0
”字符偏移7
以獲得“ 7
”字符:
@Test
public void givenAnInt_whenAdding0_thenExpectedCharType() {
int num = 7;
char c = (char)('0' + num);
assertEquals('7', c);
}
3.2.使用Character.forDigit()
方法
添加“ 0
”有效,但似乎有點老套。幸運的是,我們有一種更簡潔的方法來使用[Character.forDigit()](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Character.html#forDigit(int,int))
方法:
@Test
public void givenAnInt_whenUsingForDigit_thenExpectedCharType() {
int num = 7;
char c = Character.forDigit(num , 10);
assertEquals('7', c);
}
我們可以注意到forDigit
()
方法接受第二個參數radix,
它表示我們要轉換的數字的基本表示形式。在我們的例子中,它是10
。
3.3.使用Integer.toString()
方法
我們可以使用包裝器類Integer,
它具有toString()
方法,可將給定的int
轉換為其String
表示形式。當然,這可以用於將多位數字轉換為String. B
但是,我們也可以通過鏈接String. B
charAt()
方法並選擇第一個char
char
@Test
public void givenAnInt_whenUsingToString_thenExpectedCharType() {
int num = 7;
char c = Integer.toString(num).charAt(0);
assertEquals('7', c);
}
4. 將char
轉換為int
之前,我們看到瞭如何將int
轉換為char
。讓我們看看如何獲取char
的int
值。正如我們可能預料的那樣,將char
轉換為int
是行不通的,因為這為我們提供了字符的 UTF-16 編碼的十進製表示:
@Test
public void givenAChar_whenCastingFromCharToInt_thenExpectedUnicodeRepresentation() {
char c = '7';
assertEquals(55, (int) c);
}
4.1.減去'0'
如果當我們添加 '0' 時我們得到char,
然後相反地通過減去 '0' 十進制值,我們應該得到int
:
@Test
public void givenAChar_whenSubtracting0_thenExpectedNumericType() {
char c = '7';
int n = c - '0';
assertEquals(7, n);
}
這確實有效,但有更好、更簡單的方法來做到這一點。
4.2.使用Character.getNumericValue()
方法
Character
類再次提供了另一個輔助方法getNumericValue()
,
它基本上按照它說的做:
@Test
public void givenAChar_whenUsingGetNumericValue_thenExpectedNumericType() {
char c = '7';
int n = Character.getNumericValue(c);
assertEquals(7, n);
}
4.3.使用Integer.parseInt()
我們可以使用[Integer.parseInt()](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Integer.html#parseInt(java.lang.String))
將String
轉換為數字表示形式。和以前一樣,雖然我們可以使用它來將具有多個數字的整個數字轉換為int
表示形式,但我們也可以將它用於單個數字:
@Test
public void givenAChar_whenUsingParseInt_thenExpectedNumericType() {
char c = '7';
int n = Integer.parseInt(String.valueOf(c));
assertEquals(7, n);
}
確實,語法有點繁瑣,主要是因為它涉及到多次轉換,但它按預期工作。
5.結論
在本文中,我們了解了字符在 Java 中是如何在內部表示的,以及我們如何將int
轉換為char
並返回。
與往常一樣,可以在 GitHub 上找到本文的完整代碼示例。