Java知识系统回顾整理01基础03变量04类型转换
一、不同类型之间的数据可以互相转换,但是要满足一定的规则
二、数据类型转换规则
- 转换规则如图所示
- 精度高的数据类型就像容量大的杯子,可以放更大的数据
- 精度低的数据类型就像容量小的杯子,只能放更小的数据
- 小杯子往大杯子里倒东西,大杯子怎么都放得下
- 大杯子往小杯子里倒东西,有的时候放的下,有的时候就会有溢出
- 需要注意的一点是:
- 虽然short和char都是16位的,长度是一样的 。但是彼此之间,依然需要进行强制转换。

|
public class HelloWorld { public static char c = 'A'; short s = 80; //虽然short和char都是16位的,长度是一样的 //但是彼此之间,依然需要进行强制转换 c = (char) s; //直接进行转换,会出现编译错误 s = c; } } |

三、低精度想高精度转换
|
long l = 50; int i = 50; |
l 是long类型的,其类型长度是64位
i 是int类型的,其类型长度是32位
所以l的精度,比i的精度要高
l = i;
把i的值赋给l, 首先l和i彼此的类型是不一样的,那么能否转换就取决于彼此的精度
这个例子,是低精度向高精度转换 是可以正常转换的
换句话说,int比较小,要放进比较大的long,随便怎么样,都放的进去

|
public class HelloWorld { public static long l = 50; int i = 50; //int比较小,要放进比较大的long,随便怎么样,都放的进去 l = i; } } |
四、高精度向低精度转换
|
byte b = 5; int i1 = 10; int i2 = 300; b = i1; b=i2; |
b的类型是byte,其长度是8,最大只能放127
i1 的类型是int, 其长度是32,最大,反正就是很大了,超过127
所以, 把int类型的数据转成为byte类型的数据,是有风险的
有的时候是可以转换的,比如 b = i1 【当i1=10时,未超过127】
有的时候不可以转换 比如 b= i2 【当i2=300时,超过了127】 因为放不下了
编译器就会提示错误
这个时候就只能采用强制转换,强制转换的意思就是,转是可以转的,但是不对转换之后的值负责。 风险自担,后果自负

注:
- int类型的长度是32位,划分了4个位段,1个位段八位
- byte类型的长度是8位,划分了1个位段,1个位段八位
- b为byte类型,值为5,二进制的数值为:00000101
- i1为int类型,值为10,二进制的数值为:00000000 00000000 00000000 00001010
- i2为int类型,值为300,二进制的数值为: 00000000 00000000 00000001 00101100
- int类型转换为byte类型的过程中,前3个八位段都会置空。i1强制转换为b时,因为i1的前3个八位段的值都是0,所以没有造成精度损失。所以该行b = (byte) i1;执行后,b的值被赋为i1的值,等于10
- 而i2强制转换为b时,因为i2的第3个八位段的最后一位有值1,该值在int类型强制转换成byte类型时,随着前三个八位段一起置空损失掉了,造成了精度损失。所以只留下了最后一个位段的00101100,该值为44
|
public class HelloWorld { public static byte b = 5; int i1 = 10; int i2 = 300; b = (byte) i1; //因为i1的值是在byte范围之内,所以即便进行强制转换 //最后得到的值,也是10 System.out.println(b); //因为i2的值是在byte范围之外,所以就会按照byte的长度进行截取 //i2的值是300,其对应的二进制数是 100101100 //按照byte的长度8位进行截取后,其值为 00101100 即44 b =(byte) i2; System.out.println(b); //查看一个整数对应的二进制的方法: System.out.println(Integer.toBinaryString(i2)); } } |
五、练习及答案
题目:
short a = 1;
short b = 2;
那么 a+b 是什么类型?
官方答案:
整型和整型进行运算的时候,如果两边的值都是小于或者等于int的,那么其结果就是int。
|
public class HelloWorld { public short a = 1; short b = 2; short c = (short) (a+b); } } |
个人整理答案:

Java知识系统回顾整理01基础03变量04类型转换的更多相关文章
- Java知识系统回顾整理01基础03变量03字面值
一.字面值定义 创建一个Hero对象会用到new关键字,但是给一个基本类型变量赋值却不是用new. 因为基本类型是Java语言里的一种内置的特殊数据类型,并不是某个类的对象. 给基本类型的变量赋值的 ...
- Java知识系统回顾整理01基础03变量02基本变量类型
一.变量类型分类 一个变量的类型,决定了该变量可以包含什么样的值. Java中有八种基本类型,都是Java语言预先定义好的,并且是关键字. 这八种基本类型分别是: 整型 (4种) 字符型 (1种) ...
- Java知识系统回顾整理01基础03变量07final关键字
一.final赋值 final 修饰一个变量,有很多种说法,比如不能改变等等 准确的描述是 当一个变量被final修饰的时候,该变量只有一次赋值的机会 二.在声明的时候赋值 i已经被赋值为5,所以这里 ...
- Java知识系统回顾整理01基础03变量06变量的作用域
一.变量根据所处的位置对应不同的名称 变量处于不同的位置,有不同的名称 名称分别是 字段,属性 参数 局部变量 不同名称的变量,其作用域是不一样的 二.字段,属性,Field 当一个变量被声明在类下 ...
- Java知识系统回顾整理01基础03变量05变量命名规则
一.命名规则 变量命名只能使用字母 .数字. $. _ 变量第一个字符 只能使用: 字母. $. _ 变量第一个字符 不能使用数字 注:_ 是下划线,不是-减号或者-- 破折号 int a= 5; i ...
- Java知识系统回顾整理01基础03变量01变量定义
定义: 变量:用来命名一个数据的标识符 一.什么是变量? 用具体实例定义变量 变量的定义是: 用来命名一个数据的标识符 1949 这是一个数字,代表某年 如果要命名这个数字,在java里就会写成: i ...
- Java知识系统回顾整理01基础03变量09块
一.定义 块:从{ 开始 到对应的} 结束,即一个块 public class HelloWorld { //类对应的块 public static void main(String[] args) ...
- Java知识系统回顾整理01基础03变量08表达式
一.以 ; 结尾的一段代码,即为一个表达式 表达式是由变量.操作符以及方法调用所构成的结构.如下所示: int i = 5; System.out.println(5); 都是表达式 public c ...
- Java知识系统回顾整理01基础06数组04增强型for循环
增强型for循环在遍历一个数组的时候会更加快捷 一.增强型for循环 注:增强型for循环只能用来取值,却不能用来修改数组里的值 public class HelloWorld { public st ...
随机推荐
- fragment没有getWindowManager 关于fragment下的报错解决方法
其实很简单:只需要在getWindowManager().getDefaultDisplay().getMetrics(metric) 前面加上getactivity()即可.
- Vue.use() 不一样的发现
1.Vue.use()首先是可以接受一个函数 var a = function () { console.log(a)}Vue.use(a) // 没有问题会输出a 2.当这个a上面有install属 ...
- 最短路径(dijkstra 与 Floyd)
目录 1. 如何建图? 2. Floyd 3. Dijkstra 1. 如何建图? 要跑最短路,首先要有图 --鲁迅 常用的存储方法有两种,分别是邻接矩阵(用二维数组表示边)和邻接表(模拟链表表示边) ...
- NGINX 命令 重启 WINDOWS
最近系统更新比较频繁,web系统老是上新,因此在nginx这边经常需要重启或者刷新,做了一个批命令供参考. 1.鼠标右键-新建-一个.TXT文本文档:在里面输入NGINX重启的命令. 2.输入NGIN ...
- Fibonacci and Counting(水题)
链接:https://ac.nowcoder.com/acm/contest/303/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 前端插入date类型的数据到数据库
//插入 @Override public boolean insertEmp(Emp emp) { String sql = "insert into emp(lwlEmpno,lwlEn ...
- poi自动生成Ecxel表格和Chart图表
最近因为业务需求,需要做poi自动导出Ecxel表格和Chart折线图的功能. 所以我在网上找到了一篇关于poi生成Chart图表的博客,代码很详细,但是缺少相关注释说明. 想要将它改造成自己需要的样 ...
- softmax交叉熵损失函数求导
来源:https://www.jianshu.com/p/c02a1fbffad6 简单易懂的softmax交叉熵损失函数求导 来写一个softmax求导的推导过程,不仅可以给自己理清思路,还可以造福 ...
- [LeetCode]695. 岛屿的最大面积(DFS/BFS)、200. 岛屿数量(DFS/BFS待做/并差集待做)
695. 岛屿的最大面积 题目 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被 ...
- python循环输出
python 目录 python 1.九九乘法表 2.循环输出数字0-9,数字为六,跳出循环,执行其他循环,数字为八,结束循环 3.使用循环计算0-100素数的和 4.使用for循环输出三角形 1.九 ...