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

二、数据类型转换规则

  • 转换规则如图所示 
    • 精度高的数据类型就像容量大的杯子,可以放更大的数据
    • 精度低的数据类型就像容量小的杯子,只能放更小的数据
  • 小杯子往大杯子里倒东西,大杯子怎么都放得下
  • 大杯子往小杯子里倒东西,有的时候放的下有的时候就会有溢出
  • 需要注意的一点是: 
    • 虽然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);

}

}

个人整理答案:

最新文章

  1. 翻唱曲练习:龙珠改主题曲 【Dragon Soul】龙之魂
  2. mysqll底层分享(一):MySQL索引背后的数据结构及算法原理
  3. cocos2d-x内存管理(见解)
  4. 0511 backlog
  5. oracle表相关
  6. 输入文本框,当点击enter时,做进一步处理!
  7. Android -- NDK开发入门
  8. 利用jquery+iframe做一个ajax上传效果
  9. LeetCode: Distinct Subsequences [115]
  10. bone collector hdu 01背包问题
  11. js求三位数的和
  12. 201521123004《Java程序设计》第5周学习总结
  13. Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
  14. Algorithm --> 求N以内的真分数个数
  15. SQL之LIMIT ,OFFSET
  16. NOIP-数字反转
  17. python3 urllib及requests基本使用
  18. js三种经典排序:冒泡排序、插入排序、快速排序
  19. 定时执行自动化脚本-(二)ant发送邮件及邮件中添加附件
  20. 【Selenium2】【HTMLTestRunner】

热门文章

  1. 用aop去解决事物问题(tx)记录学习之aop1.2
  2. 聊一聊RocketMQ的注册中心NameServer
  3. 1.spring boot初始化项目
  4. cdq分治——bzoj2683简单题
  5. 网易云uwp
  6. SpringMVC-08-SpringMVC层编写
  7. Linux下 ls 命令的高级用法8例
  8. SpringBoot2.0 配置多数据源
  9. ansible使用,常用模块
  10. [计算机网络]图解HTTP阅读笔记