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

二、数据类型转换规则

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

}

}

个人整理答案:

Java知识系统回顾整理01基础03变量04类型转换的更多相关文章

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

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

  2. Java知识系统回顾整理01基础03变量02基本变量类型

    一.变量类型分类 一个变量的类型,决定了该变量可以包含什么样的值. Java中有八种基本类型,都是Java语言预先定义好的,并且是关键字. 这八种基本类型分别是:  整型 (4种) 字符型 (1种) ...

  3. Java知识系统回顾整理01基础03变量07final关键字

    一.final赋值 final 修饰一个变量,有很多种说法,比如不能改变等等 准确的描述是 当一个变量被final修饰的时候,该变量只有一次赋值的机会 二.在声明的时候赋值 i已经被赋值为5,所以这里 ...

  4. Java知识系统回顾整理01基础03变量06变量的作用域

    一.变量根据所处的位置对应不同的名称 变量处于不同的位置,有不同的名称 名称分别是  字段,属性 参数 局部变量 不同名称的变量,其作用域是不一样的 二.字段,属性,Field 当一个变量被声明在类下 ...

  5. Java知识系统回顾整理01基础03变量05变量命名规则

    一.命名规则 变量命名只能使用字母 .数字. $. _ 变量第一个字符 只能使用: 字母. $. _ 变量第一个字符 不能使用数字 注:_ 是下划线,不是-减号或者-- 破折号 int a= 5; i ...

  6. Java知识系统回顾整理01基础03变量01变量定义

    定义: 变量:用来命名一个数据的标识符 一.什么是变量? 用具体实例定义变量 变量的定义是: 用来命名一个数据的标识符 1949 这是一个数字,代表某年 如果要命名这个数字,在java里就会写成: i ...

  7. Java知识系统回顾整理01基础03变量09块

    一.定义 块:从{ 开始 到对应的} 结束,即一个块 public class HelloWorld { //类对应的块 public static void main(String[] args) ...

  8. Java知识系统回顾整理01基础03变量08表达式

    一.以 ; 结尾的一段代码,即为一个表达式 表达式是由变量.操作符以及方法调用所构成的结构.如下所示: int i = 5; System.out.println(5); 都是表达式 public c ...

  9. Java知识系统回顾整理01基础06数组04增强型for循环

    增强型for循环在遍历一个数组的时候会更加快捷 一.增强型for循环 注:增强型for循环只能用来取值,却不能用来修改数组里的值 public class HelloWorld { public st ...

随机推荐

  1. js中的各种常用方法(持续更新中。。。)

    我看到常用的就写上去,如果你们有,可以在评论上发表,我再把它补充到我的随笔中 some() var ages = [3, 10, 18, 20]; function checkAdult(age) { ...

  2. Python | 详解Python中的协程,为什么说它的底层是生成器?

    今天是Python专题的第26篇文章,我们来聊聊Python当中的协程. 我们曾经在golang关于goroutine的文章当中简单介绍过协程的概念,我们再来简单review一下.协程又称为是微线程, ...

  3. Linux安装Rabbitmq3.8.5

    安装环境: 操作系统为:centOS-7 erlang版本为22.3,软件包:otp_src_22.3.tar.gz rabbitMQ版本为3.8.5,软件包:rabbitmq-server-gene ...

  4. Android Studio开发工具常用快捷键。部分总结,不全面,只包含新手可能少用的

    Android Studio开发工具常用快捷键.部分总结,不全面,只包含新手可能少用的 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 首先说明,因为 ...

  5. Copy a Xaml object

    <Control.Resources> <Button Click="Button_OnClick" x:Key="MyButton"> ...

  6. 飞跃原野(三维bfs)

    Problem Description 勇敢的法里奥出色的完成了任务之后,正在迅速地向自己的基地撤退.但由于后面有着一大群追兵,所以法里奥要尽快地返回基地,否则就会被敌人逮住. 终于,法里奥来到了最后 ...

  7. 08_Python的数据类型

    1.数字(整型int 浮点型float 复数complex) 1.数字概述 不可变类型,一旦创建不可修改,不是迭代对象,属于原子型 2.整型数int 概述: 整型数是不带有小数部分的数字,包括自然数, ...

  8. Java中构建长字符串的四种模式

    回字有四种写法,构建字符串也有四种方式. 用+号最快,第二第三种可读性好,第四种是log4j自有的.下面请见代码: package logbackCfg; import java.text.Messa ...

  9. 借助rownum中求Oracle表中前三名(三甲:状元榜眼探花)的方法(总计三种方法,以讲述rownum的使用为主)

    要求前三名,MySQL中有order by排序,limit限制数量,结果很容易得到,而且limit的执行顺序也在order by之后,写出的sql高效易懂而不易出错. 但在oracle中,由于没有li ...

  10. Linux:基础命令三

    一.软链接 相当于windows中的快捷方式,为了方便用户在使用时更快找到 ln -s /application/appche2.2.0/  /application/appche       注意: ...