序言
锲而不舍,金石可镂。
今天来梳理Java数据类型转换,这部分很杂乱,顺便总结总结API,做个笔记。
类型种类
Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能。
如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:
基本类型 | 对应的包装类(位于java.lang包中) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
经常使用的有4种基本类型:
- char
- byte
- String
- int(Integer)
一下主要讨论这四个类型的转换,会用到包装类。
char <-> int
先看代码:
1 | public static void main(String[] args) { |
可以看到,如果进行强制类型转换,char会和ASCII码进行互相转换。
char -> int
现在想要的是 char:’9’ -> int:9
转换代码:
1 | char b = '4'; |
int -> char
现在想要的是 int:9 -> char:’9’
转换代码:
1 | int a =4; |
其他方法
直接将’0‘的ASCII码值加上一起转换
1 | char c = (char)('0' + i); |
int <-> byte
int -> byte
会发生高位截断:
1 | int a = 234; |
byte -> int
1 | public static int byteToInt(byte b) { |
char <-> String
这类就很常见了。
char -> String
直接上API,万物.valueOf()
转一切。
1 | char a = 'A'; |
字符数组:
1 | char[] c = new char[]{'A','B','C','D','E','F','G'}; |
String -> char
老熟面孔了:
1 | //n = "ABCDEFG" |
String <->byte
这里默认就是byte[]字节数组。
String -> byte[]
直接上代码:
1 | String str = "ABCDEFG"; |
可以发现直接内容其实就是ASCII码。
byte[] -> String
直接用String的构造方法就行,直接上:
1 | byte[] b= {-60,-29,-70,-61,-93,-84,-42,-48,-71,-6,13,10,-42,-48,-71,-6,-93,-84,-60,-29,-70,-61}; |
int <-> String
int[] -> String
可以用StringBuilder,直接上:
1 | StringBuilder sb = new StringBuilder(); |
要是想转换为ASCII码对应的字符串,可以这么写:
1 | StringBuilder sb = new StringBuilder(); |
String -> int[]
1 | String ss = "12345678"; |
byte<->char
char[] -> byte[]
方法1:用String作为跳板
1 | char[] cs = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g' }; |
方法2:循环+强制转型
1 | char[] cs = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g' }; |
byte[] -> char[]
1 | private char[] getChars (byte[] bytes) { |