写在前面的话
我在java学习笔记(一)里记录了我学习中遇到的一些问题以及学习到的重点知识的框架记录。虽然很明确很清晰,但是,也正是因为简短清晰的原因,好像意思表达不是很明确。对于老手来说,太简单,对于新手来说,看不懂。好像就是写了一篇废文,没有任何作用。意识到这一点,我会尽量在以后的文章中将知识点写的更详细,更具体。争取可以对和后来学习的人有一点帮助。
类型转换
同种类型可直接转换
同种类型直接赋值就可以完成转换
int x = 1;
int y = x;
不同类型的转换
- 同种大数据类型之间才能直接转换
基本类型与基本类型直接转换
分为(自动 强制)俩种情况,之后解释
引用类型与引用类型直接转换
分为(自动 强制)俩种情况,之后解释
分为(上转型 下转型)两种方式,涉及到引用类型。后续文章讲解过应用类型变量后,再做解释 - 不同种大数据类型之间如何实现转换
基本类型与引用类型之间可间接转换
使用包装类或者叫分装类,大致思想就是把基本类型包装成类(引用类型)。然后实现引用类型之间的转换
涉及到引用类型。后续文章讲解过应用类型变量后,再做解释 - 基本类型之间的转换
小数据类型相同
都是整形
从内存小的,转换为,内存大的
直接 自动转换
byte x = 1;
int y = x;
byte占一个字节大小,int四个字节,所以可以直接转化。转化的时候,’='有决策功能,自动在一个字节即八位的byte类型的前面补0。直到和int类型位数相同
从内存大的,转换为,内存小的
直接 强制转换
int x = 1;
byte y = x;
注意:以上是错误写法!!!
错误:不兼容的数据类型:从int转换到byte可能会有损失
所以应该有强制转换
int x = 1;
byte y = (byte)x;
正确,将x强制转换。只保留后八位。
思考:为什么byte x = 1;可以编译?不是说java整数常量是int类型吗?
因为‘=’有一个机制,当右边为常量时就会判断。如果多出来的全部是0。就会自动把0去掉。例如:byte x = 1000;就会报错了
思考:为什么int x = 1000;byte y = (byte)x;不报错?为什么输出y的话回是-24?
因为强制转换就不会对后面的值做判断了,直接把左边多出来的位切掉。留下右边八位。1000的二进制在int类型存储为:00000000 00000000 00000011 11101000。byte类型只有8位,保留最右边的八位,11101000根据补码规则及十进制转换,就是-24。补码规则和为什么计算机里要用补码,将在后续文章讲到
都是浮点型
与整型类似
float x = 1.0F;
double y = x; //自动转换
double x = 1.0;
float y = (float)x; //强制转换
小数据类型不同
整型与浮点
大小确定方式
通过实验说明
long x = 1;
float y = x;
可以编译
float x = 1.0F;
long y = x;
注意:以上是错误写法!!!
错误:不兼容的数据类型:从float转换到long可能会有损失
所以应该有强制转换。从中可以看出java是根据精确度确定大小,而不是空间大小确定。可能是存储方式不同,所以转换不能直接砍掉前面
转换具体实现方式
与整型类似
int x = 1;
float y = x; //自动转换
float x = 1.0F;
int y = (int)x; //强制转换
整型与字符
Java使用Unicode码
与c++不同,c++是Ascll码
大小确定方式
按空间,整形(int)4个字节,字符俩个字节。整型位数多,放在字符里会多出来,所以会损失。字符位数小,放在整型里,补0就行
转换方式与整型类似
char x = 'a';
int y = x; //75 自动转化。
注意:short byte不行。根据空间大小就能知道。
int x = 75;
char y = (char)x; //强制转化 不强制,会报错。
整形与布尔
不能转换!!!
不同于c++。在Java中,布尔类型不能和0 1相互转化。
引用与引用
涉及到引用类型。后续文章讲解过应用类型变量后,再做解释
编写不易,求转发点赞,谢谢!!! |
---|