八种数据类型:byte、int、short、long、float、double、char、boolean
聊一些基本数据类型中有意思的事情
观点1、基本数据类型是互通的
基本数据类型本质上都是字节,是01组成的数据
为什么基本数据类型是互通的,因为在不考虑精度的情况下,除了boolean类型,基本数据类型是可以直接强转输出的
怎么证明这一点呢?
// 精度相同的场景下:
System.out.println((byte) 98);
System.out.println((byte) 'b');
在精度相同的场景下,将int类型的98和char类型的'b'转为byte类型输出,得到的结果都是98
一方面是PrintStream输出流方法的逻辑,另一方面说明了将98转为二进制数据,这个数据可以代表int 98
,也可以代表char 'b'
,当然它也可以代表那一串byte数据
// 不同精度的场景下:
System.out.println((byte) 2.1f);
System.out.println((byte) 2.1d);
而在不同精度的场景下,虽然也能把float、double转为byte,但是会损失精度
其实本质上是先把float和double转成了int,再进一步转成byte
当然,剩下的boolean是无法和int互转的,因此就无法和byte、char互转
那么基本数据类型的互转有什么用呢?
利用字节流读取文件的时候,读取到的都是byte数据,可以直接利用基本数据类型的互通性进行数据转换
FileInputStream fis = new FileInputStream("C:\\Users\\g30038553\\Desktop\\temp\\tag加密\\tag65536特殊字符.txt");
byte[] bytes = fis.readAllBytes();
// 直接读全文,如果是读中文,增加标准字符集转码
String origin = new String(bytes, StandardCharsets.UTF_8);
System.out.println(origin);
// 如果想遍历做处理,也可以转char处理
for (byte : bytes) {
char c = (char) byte
// dosomething
}
// 也可以利用String#charAt方法遍历
for (int i = 0; i < origin.length(); i++) {
String word = String.valueOf(origin.charAt(i));
// dosomething
}
评论区