java数据类型的转换

Java中可以进行不同数据类型的加减乘除运算吗?是可以的。在算术运算符中已经体验过如果两个整数(int)相除会去掉小数部分。如果需要保留小数部分,可以让除数或者被除数变为double类型的(5变为5.0)。其实Java是自动的将int的那个数变为了double类型了也就是Java自动的将整数变为了浮点数。例如5/2.0 其实是5.0/2.0

1、自动类型转换(也叫隐式类型转换)

可以将一个数赋值给更大数值范围的变量,例如可以经byte 变量赋值给short变量可以将short变量赋值给int变量可以将int变量赋值给long变量。

Java内部其实做了工作就是自动将数值进行了类型提升,就叫做自动类型转换(也叫隐式类型转换)

byte b = 1; //00000001

short s = b; //00000000 00000001

int i =s;long lon =i;double d = lon; //1.0

自动类型转换(也叫隐式类型转换)

要实现自动类型的转换,需要满足两个条件,第一两种类型彼此兼容,第二目标类型取

值范围必须大于源类型。所有的数字类型,包括整形和浮点型彼此都可以进行转换。

例如:

byte b=100;int x=b;

System.out.println(x);//程序把b结果自动转换为int类型。

2、强制类型转换(也叫显式类型转换)

不可以将一个数值赋给范围更小数值范围的变量,除非进行类型转换。

byte b = 100;

b= b + 2; //编译报错

System.out.println(b);

上述例子发生了什么,发生了类型转换。

b+2 遇到了加法运算,2默认是int类型,byte类型b变量存储的值自动类型提升为

了int类型。执行完加法运算后的结果就是int类型,想要将int的类型值放入到byte类型变量b中,无法放入,编译报错。

byte b=1;

b=(byte)(b+2);

当两种类型彼此不兼容,或者目标类型取值范围小于源类型(目标是byte源是int)

无法自动转换,此时就需要进行强制类型转换。

强制类型转换需要注意:

损失精度!!!

int a=128;byte b=(byte)a;

System.out.println(b);//-128/** 此时的强转已经造成了数值的不准确*/

int

00000000  00000000  00000000   10000000

byte

10000000

再次分析此行代码

byte b = 100;

b= b + 2;

System.out.println(b);

编译:提示如下错误。

3、类型转换的原理

可以把byte 理解为1两的碗,short 2两的碗,int 4两的碗,long 8两的碗。1两碗的满碗酒可以倒入 2两 4两 8两的碗中。但是 4两碗的酒倒入1两碗的酒就有一些问题。

4.什么时候要用强制类型转换

比如小数部分只想保留整数部分.

一定要清楚要转换的数据在转换后数据的范围内否则会损失精度.

public static voidmain(String[] args) {byte b = 100;

b= (byte) (b + 2);

System.out.println(b);//102//舍弃小数部分

double d=5.5;int num=(int)d;

}

5.表达式的数据类型自动提升

算术表达式,逻辑表达式

所有的byte型、short型和char的值将被提升到int型。

如果一个操作数是long型,计算结果就是long型;

如果一个操作数是float型,计算结果就是float型;

如果一个操作数是double型,计算结果就是double型。

分析System.out.println(‘a’+1)结果?

自动类型提升

byte b = 3;int x = 4;

x= x + b;//b会自动提升为int 类型参与运算。

System.out.println(x);//7

强制类型转换

byte b = 2;/** 强制类型转换,强制将b+2强制转换为byte类型,再赋值给b*/b= (byte) (b + 2);

System.out.println(b);//4

思考1

byte  b=126;

问:既然数据默认的有数据类型,那么126默认是int类型的,为什么存储到byte类型时不会报错呢。

126是常量java在编译时期会检查该常量(每个常量)是否超出byte类型的范围。如果没有可以赋值。

思考2:byte b=128;能否正常的编译和运行。

该语句会出现编译错误,128超出了byte变量的存储范围,所以出现编译错误。

思考2

byte b1=3,b2=4,b;

b=b1+b2;

b=3+4;

哪一句编译失败?为什么?

b =3+4,3和4都是常量,所以java在编译时期会检查该常量(每个常量)是否超出byte类型的范围。如果没有可以赋值。例如b=128+1就无法编译通过。b=127+1;也是无法通过。

b =b1+b2不可以,因为b1和b2是变量,表达式求值时,变量值会自动提升为int型,表达式结果也就成了int型,这是要赋值给byte型的b,必须进行强制类型转换了。

6、System.out.println(‘a’+1)结果

美国人为了让计算机识别他们生活中的文字,让二进制表示生活中的文字.所以一个字母代表了一个二进制.,二进制也有十进制的表现形式.,把生活中的字母都用数字来标识,例如97代表a,98代表b。打印’a’就把a作为输出显示,没有疑问。但是‘a’+1有加号涉及到了运算。根据java自动类型提升规则,同样道理char提升为int。就把’a’代表的数字体现了出来。a表示的是97  97+1就是98;那么想要查看98表示的char是什么怎么实现呢?就要用到刚才介绍的强制类型转换了System.out.println(char(‘a’+1));就取到了98在ASCII码表中表示的字符。大写A和小写a在ASCII有不同的表现。还有一个概念字符’1’在ASCII中不是数字1,可以运行代码查看,到此就可以明白了char类型,char类型也是可以参与运算的,为什么可以参与运算呢。因为字符在ASCII表中都有对应的数字体现。所有的计算机兼容ASCII。

System.out.println('a'+1); //98

System.out.println((char)('a'+1));  //b

补充问题:

int i='a'+'b';

System.out.println(i);//结果?

System.out.println("hello"+'j'); //结果?

总结:

所有数值运算符都可以用在char型数据上,如果另一个操作数是一个数字或者字符,那么char会自动提升为int型,如果另一个操作数是字符串,那么字符就会和字符串相连。

1.表达式的数据类型自动提升

算术表达式,逻辑表达式

所有的byte型、short型和char的值将被提升到int型。

如果一个操作数是long型,计算结果就是long型;

如果一个操作数是float型,计算结果就是float型;

如果一个操作数是double型,计算结果就是double型。

分析System.out.println(‘a’+1)结果?

自动类型提升

java 类型转换原理_9.java数据类型的转换相关推荐

  1. 视频教程-Java异常原理剖析-Java

    Java异常原理剖析 曾任职于国内知名校企合作单位.超过6年教育行业工作经验.曾在多家线上教育平台讲授过公开课.和VIP课程,擅长讲授JAVASE.JAVAWEB相关的课程.授课氛围清晰自然,讲解内容 ...

  2. 【JAVA SE】 JAVA基础强袭之路 数据类型及其转换和提升全面讲解(猛男细节+保底一个收藏)

    本章目录 温馨提示 开篇介绍( 说的多一点 耐心看完哦!) 本章重点 正文开始 1. 变量和类型 1.1 常量 1.2 变量 1.2.1 变量的作用域 1.2.2 变量的命名规则(阿里巴巴开发手册) ...

  3. Java输出、变量、数据类型及其转换

    20190701(输出.变量.数据类型及其转换) 标签: java #输出命令 System.out.println("徐凤年"+"两袖青蛇"+"剑开 ...

  4. java 引用类快捷键_Java数据类型及其转换经常用到的快捷键

    数据类型 基本数据类型分类 (8种) byte .short. int. long. char. float. double .boolean 1个字节占8位 整数型byte 1字节 -128~127 ...

  5. java类型转换答案,在java中支持两种类型的类型转换,自动类型转换和强制类型转换。父类转化为子类需要强制转换。...

    在java中支持两种类型的类型转换,自动类型转换和强制类型转换.父类转化为子类需要强制转换. 更多相关问题 计算机病毒通过()传染扩散得极快,危害最大. 当一个现象的数量由小变大,另一个现象的数量相反 ...

  6. 【Java 虚拟机原理】Java 类中的类加载初始化细节 ( 只使用类中的常量时加载类不会执行到 ‘初始化‘ 阶段 )

    文章目录 一.类加载初始化时机 二.常量加载示例 三.数组加载示例 一.类加载初始化时机 类加载时机 : Java 程序执行时 , 并不是一开始将所有的字节码文件都加载到内存中 , 而是用到时才进行加 ...

  7. 【Java 虚拟机原理】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 | 静态变量 )

    文章目录 一.静态变量 二. Java 引用类型 ( 强.软.弱.虚 ) 一.静态变量 GC Root 对象 : 线程栈 中的 栈帧 中的 局部变量表 中的 引用对象 ; 方法区 中的 静态引用对象 ...

  8. Java类型转换笔记

    Java类型转换笔记 关于基本数据类型之间的互相转换:转换规则 1.八种基本数据类型当中除布尔类型之外剩下的7中类型之间都可以互相转换 2.小容量向大容量转换,称为自动类型转换,容量从小到大排序: b ...

  9. 【java后端学习】java语言基础(夯实基础)

    文章目录 一.基础语法 1 java中的标识符 1.1 变量命名规范 1.2 保留字 2 java中的常量 3 java基本数据类型 4 数组 5 字符及字符串 6 运算符 7 控制语句 for语句 ...

最新文章

  1. 迁移学习之ResNet50和ResNet101(图像识别)
  2. poj 3349 雪花
  3. Android优化——UI优化(二) 使用include标签复用布局
  4. boost::mp11::mp_set_push_front相关用法的测试程序
  5. Tomcat debug启动出错Unable to open debugger port (127.0.0.1:62947): java.net.SocketException socket clo
  6. 如何优雅的使用fbx sdk
  7. 4-5 求自定类型元素的最大值 (10分)
  8. js 正则表达式总结
  9. libs/spandsp/src/floating_fudge.h:40:20: error: implicit declaration of function ‘sin’ [-Werror=impl
  10. 【TeeChart .NET教程】(六)使用系列
  11. Spring中的bean是否是线程安全的
  12. SASS的安装及简单操作
  13. 设计师培养设计思维的5个方法
  14. java反射的优缺点_浅谈Java反射的优缺点
  15. linux下XMind创建运行图标
  16. html图片菱形,CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
  17. Java生成随机数原理_Java中随机数的产生方式与原理详解
  18. ADI-SigmaDSP开发入门
  19. matlab中yita怎么打,数学建模算法之模拟退火
  20. 怎么用计算机求称呼,亲戚关系称呼神器 三姑六婆计算器

热门文章

  1. 苹果笔记本电脑好用吗_苹果这些让人超疑惑的配件,价格超贵而且真的好用吗?...
  2. python基础序列化文件的读取(十六)
  3. python 随机padding_Python backend.spatial_2d_padding方法代码示例
  4. java可以继承私有的,关于java:继承中的私有方法
  5. php 跨域 验证_php 前后端分离开发进行跨域请求时ajax发送验证参数token的header头解决方法...
  6. Unity3d远程连接Hololens提示Cannot connect without a remote machine address specified
  7. Leecode刷题热题HOT100(17)——电话号码的字母组合
  8. 在Android上通过AI危险检测向驾驶员发出警报
  9. 活在贫困线之下的开源软件项目——开源的可持续性斗争
  10. GitHub:我们为什么会弃用jQuery?