一、不同类型之间的数据可以互相转换,但是要满足一定的规则

二、数据类型转换规则

  • 转换规则如图所示 
    • 精度高的数据类型就像容量大的杯子,可以放更大的数据
    • 精度低的数据类型就像容量小的杯子,只能放更小的数据
  • 小杯子往大杯子里倒东西,大杯子怎么都放得下
  • 大杯子往小杯子里倒东西,有的时候放的下有的时候就会有溢出
  • 需要注意的一点是: 
    • 虽然short和char都是16位的,长度是一样的 。但是彼此之间,依然需要进行强制转换。

public class HelloWorld {

public static void main(String[] args) {

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 void main(String[] args) {

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 void main(String[] args) {

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 void method1(final int j) {

short a = 1;

short b = 2;

short c = (short) (a+b);

}

}

个人整理答案:

转载于:https://www.cnblogs.com/xlfcjx/p/10767122.html

Java知识系统回顾整理01基础03变量04类型转换相关推荐

  1. Java知识系统回顾整理01基础03变量03字面值

    一.字面值定义 创建一个Hero对象会用到new关键字,但是给一个基本类型变量赋值却不是用new. 因为基本类型是Java语言里的一种内置的特殊数据类型,并不是某个类的对象.  给基本类型的变量赋值的 ...

  2. Java知识系统回顾整理01基础01第一个程序01JDK 安装

    一.首先第一步看JDK配置成功后的效果 点WIN键->运行(或者使用win+r) 输入cmd命令 输入java -version 注: -version是小写,不能使用大写,java后面有一个空 ...

  3. Java知识系统回顾整理01基础04操作符02关系操作符

    一.关系操作符 关系操作符:比较两个变量之间的关系  > 大于 >= 大于或等于 < 小于 <= 小于或等于 == 是否相等 != 是否不等 public class Hell ...

  4. Java知识系统回顾整理01基础04操作符07Scanner

    一.Scanner 需要用到从控制台输入数据时,使用Scanner类. 二.使用Scanner读取整数 注意: 使用Scanner类,需要在最前面加上 import java.util.Scanner ...

  5. Java知识系统回顾整理01基础04操作符05赋值操作符

    一.赋值操作 赋值操作的操作顺序是从右到左 int i = 5+5; 首先进行5+5的运算,得到结果10,然后把10这个值,赋给i public class HelloWorld { public s ...

  6. Java知识系统回顾整理01基础05控制流程07结束外部循环

    一.break是结束当前循环 二.结束当前循环实例 break; 只能结束当前循环 public class HelloWorld { public static void main(String[] ...

  7. java 01 02_Java知识系统回顾整理01基础02面向对象01类和对象

    一.面向对象实例--设计英雄这个类 LOL有很多英雄,比如盲僧,团战可以输,提莫必须死,盖伦,琴女 所有这些英雄,都有一些共同的状态 比如,他们都有名字,hp,护甲,移动速度等等 这样我们就可以设计一 ...

  8. 我的Java知识复习回顾笔记

    1 public class JavaSE { 2 3 public static void main(String[] args) { 4 /* 5 * JDK JRE JVM 6 * 注释 7 * ...

  9. 通过系统回顾的方法来发展循证的管理知识*。

    英国管理杂志,第14卷.207-222 (2003) 通过系统回顾的方法来发展循证的管理知识*. David Tranfield, David Denyer 和 Palminder Smart 高级管 ...

  10. 从报文角度看modbus功能码01,02,03,04的区别

    从报文角度看modbus功能码01,02,03,04的区别 01 02功能码属于位操作指令,读取的是1 bit的数据,03 04功能码属于字操作指令,读取的寄存器的数据. 以读报文为例: 01,02: ...

最新文章

  1. Python 的种类以及特点
  2. python三维图-python 三维坐标图
  3. CopyOnWrite容器
  4. 通过配置ssh深刻理解puppet的语法及工作机制
  5. python语言的优缺点论文_Python语言的优缺点是什么呢?
  6. Socket、Http、TCP/IP、UDP的联系与区别
  7. Linux文件类型 扩展名的作用
  8. 水平面天文辐射网络模拟(基于ArcGIS)
  9. 苹果+beta+软件测试计划,自讨苦吃:加入苹果Apple Beta版软件计划之后
  10. 东方通php支持,应用服务器TongWeb
  11. 编译原理c语言递归下降程序,编译原理(递归下降分析程序)
  12. app下载 微信扫码打开 提示用户用浏览器打开
  13. wlan和wifi的区别
  14. 彻底删除卸载2345安全卫士及2345浏览器
  15. 设置此计算机的用户已选择屏蔽此网站,已阻止此网站显示有安全证书错误的内容,详细教您已阻止此网站显示有安全证书错误的内容怎么解决...
  16. 幼儿园计算机基础知识,幼儿园大班计算机教学计划
  17. Android应用向su申请root权限,以及Superuser进行授权管理的原理浅析
  18. hbuilderx安装教程_HBuilderX入门教程
  19. 抓住汽车消费红利 车载软件开发 让旅途更美好
  20. 第021篇:易康(eCognition)中用点矢量文件制作样本验证分类精度的操作方法

热门文章

  1. 3.5用户访问使用HTTPS
  2. [渝粤教育] 天水师范学院 GNSS测量原理及其应用 参考 资料
  3. 【渝粤教育】国家开放大学2019年春季 3818-22T燃气工程施工 参考试题
  4. [渝粤教育] 西南科技大学 管理信息系统 在线考试复习资料(2)
  5. http://me.rice.edu/~akin/
  6. Cocos Creator 原生安卓改包名+AS运行到真机apk被slice处理而失败
  7. 页面中,通过css设置文本不能被选中
  8. [转]Bash的输入输出重定向
  9. [转]mysql_connect() 不支持 请检查 mysql 模块是否正确加载 解决
  10. Centos-7修改yum源为国内的yum源