Java基础——隐式转换vs强制转换
来源:互联网 发布:战网有mac版吗 编辑:程序博客网 时间:2024/05/21 10:17
在定义变量时,有许多要注意的问题,一不小心就会出现损失精度或者不兼容类型等问题。
例如:
1.定义长整型数据时,必须加后缀l或L
long l =123456789012345L
2.定义单精度类型时(7-8位有效数字),必须加后缀 f 或 F
float f = 12.5F
3. boolean类型不可以转换为其它的数据类型。
这其中,我们常常会遇到数据类型的转换问题,最为常见的要属隐式转换和强制转换了,我们来分析一下。
隐式转换
特征:
从小到大,可以隐式转换,数据类型将自动提升。
byte,short,char -->int -->long -->float -->double
注意:long是8个字节,float是4个字节。
long是整数,float是浮点型,整数和浮点数的存储规则不一样,记住一点long的范围是小于float的。
例 :
byte a=10;
int b=a;
当编译intb=a 时, a隐式转换为int类型。
强制转换
特征:
从大到小(如果你明确知道数据是可以用该数据类型来表示的,可以用强制转换)
格式:
(转换后的数据类型)变量或者值。
注:一般情况下,根本不推荐使用强制类型转换。
例1 :
int a=10;
byte b=(byte)a;
当编译 byte b=(byte)a时, a被强制转换为byte类型。
例2:
解析:
数据130默认的是int类型的十进制数据,
第一步:十进制130转换成二进制数据。
10000010
第二步:130在内存中的表示形式如下
原码:0000000000000000 00000000 10000010
第三步:求int130的补码
因为130是正数,所以,反码和补码都和原码一致。
补码:0000000000000000 00000000 10000010
第四步:对补码进行截取,只剩下最后8位。
(byte)130 的补码为:10000010
第五步:把该补码转化为原码。
由于符号位(第一位)是1,故该数为负数,
反码:10000001 (补码-1)
原码:11111110 (符号位不变,数据位取反)
转化为十进制为 -126,所以最终打印-126。
例3 :
shorts = 1;
s= s +1;
和
shorts = 1;
s+=1;
有问题吗?为什么呢?
解析:
第一程序会报错:错误:不兼容的类型:从int转换到short可能会有损失
原因:s=s+1;s+1会隐式转换为int类型,当把一个int类型赋值给short类型是,可能会损失。
第二个程序可以编译运行。
原因:s+=1,虽然可以看做s=s+1,但是还是有区别的,s+=1中有一个强制转换,即s=(short)(s+1),会把s+1的值强制转换为short类型,故不会报错。
小结:
数据类型转换的问题如果发生在一些小程序上,我们或许能够一眼看出,可是当编写一个庞大的系统时,拥有庞大数据量时,这些小小的问题可能导致系统出错甚至崩溃,所以前期代码编写的严谨性就得靠我们自己把握了。
显式类型转换也叫强制类型转换。从存储范围大的类型到存储范围小的类型。具体规则为:double→float→long→int→short(char)→byte语法格式为:(转换到的类型)需要转换的值示例代码:double d = 3.10;int n = (int)d隐式转化有叫自动类型转换。由系统自动完成的类型转换.从存储范围小的类型到存储范围大的类型:byte ->short(char)->int->long->float->doubleint d = 3;double n = d;
一句话:要小心
- Java基础——隐式转换vs强制转换
- Java基础——隐式转换vs强制转换
- java语言基础(8)——数据类型转换(默认转换和强制转换)
- 黑马程序员—Java基础学习笔记之数据类型转换(自动转换和强制转换)
- Java基础:Java 强制类型转换
- Java的强制类型转换与隐式类型转换
- JAVA 强制数据类型转换和隐式数据类型转换
- Java语言基础(类型提升&强制转换)
- J2SE基础-java中的强制类型转换
- Java语言基础数据类型转换之强制转换
- C#基础-010 数据类型转换 -隐式类型转换/强制类型转换
- java语言基础(10)——类型强制转换时的数据溢出计算
- c# 隐式转换 强制转换
- 类型转换(2)— 强制转换
- effective javascript(二)——隐式强制转换
- java对象强制转换
- JAVA数据类型强制转换
- JAVA 强制数据类型转换
- #586 – 冒泡事件和隧道事件通常是成对出现(Bubbling and Tunneling Events Are Typically Paired)
- 提高map[key]=value的效率
- Android常用属性简介
- VS2012下配置OpenCV2.4.10和OpenCV-3.0
- Linux操作小练习 demo
- Java基础——隐式转换vs强制转换
- Oracle动态获取表结构的应用
- 微信小程序实例:创建下发模板消息实例
- window Service log4net Log 输出
- 身份证的测试用例
- docker 安装
- 微信红包支付--发放普通红包
- 如何在C++中方便的将float、int等类型数据转换成string类型,并利用ROS中的std_msg/String发布出去
- Linux环境配置文件分类