Java类型转换(自动类型转换+强制类型转换)
一、 自动类型转换(隐式类型转换)
- 整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
自动转换从低级到高级。
自动转换有以下规律:
1、小的类型自动转化为大的类型
2、整数类型可以自动转化为浮点类型,可能会产生舍入误差
3、字符可以自动提升为整数
示例代码:
隐式类型转换
int i = 128;double b = i;//128.0
整数类型可以自动转化为浮点类型,可能会产生舍入误差
- Float和Double提供了快速的运算,然而问题在于转换为二进制的时候,有些数字不能完全转换,只能无限接近于原本的值
float floatValue1=2+10f;float floatValue2=floatValue1-11.9f;System.out.println(floatValue2);//0.10000038
字符可以自动提升为整数
char Value1 ='a';int Value2=Value1+10;System.out.println(Value2);//107
二、 强制类型转换(显式类型转换)
强制转换格式:(类型)变量名
- 强制类型转换,在要强制类型转换的前面加上括号,然后在括号里面加上你要转换的类型
(强制转换需要程序员手动处理)
注意点:
1、强制类型转换可能导致溢出或损失精度
2、在把容量大的类型转换为容量小的类型时必须使用强制类型转换
3、浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
4、不能对布尔值进行转换
5、不能把对象类型转换为不相干的类型
示例代码:导致溢出(1)
容量大类型转容量小类型
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
- 溢出: 数据类型超过了计算机字长的界限而出现的数据溢出。
int i = 128;byte b = (byte)i;//-128 内存溢出// 00000000 00000000 00000000 10000000 128的原码// 00000000 00000000 00000000 10000000 128的反码// 00000000 00000000 00000000 10000000 128的补码// 10000000 的补码// 11111111 反码// 10000000/*** 关于 原码,反码,补码的知识(了解)* 正数的反码,补码是其本身;* 负数的反码是符号位保持不变,其余位取反;负数的补码是在其反码的基础上+1*/
1、为什么会是负的呢?
2、byte 最大值是 127,这里给了它128,所以它超出了最大值,数据类型超过了计算机字长的界限而出现的数据溢出
示例代码:导致溢出(2)
package com.gr.demo;
public class demo4 {public static void main(String[] args) {//操作比较大的数的时候,注意溢出问题//JDK7新特性,数字之间可以用下划线分割int money = 10_0000_0000;int years = 20;int tota1 = money*years;//-1474836480 计算的时候溢出了System.out.println(tota1);//-1474836480long tota2 = money*years;//默认是int,转换之前已经存在问题了?long tota13 = money*((long)years);//先把一个数转换为Long 在计算之前就把精度解决掉了System.out.println(tota13);//20000000000}
}
示例代码:损失精度
- int是要强制类型转换后的数据类型
- 浮点数转换整数是通过舍弃小数得到的,而不是四舍五入
System.out.println((int)23.7);//23 舍弃小数
System.out.println((int)-45.89f);//-45 舍弃小数
示例代码:字符强制转换成数字
char c1 = 'a';char c2 = '中';System.out.println(c1);//aSystem.out.println((int)c1);//97 强制转换System.out.println(c2);//中System.out.println((int)c2);//20013 强制转换
- 注意:所有的字符本质还是数字
- Char类型 会涉及到Unicode编码问题 上面的小写a就代表着97,大写的A代表着65。
ASCLL编码表片段,这个不是很详细,大家可以大概看看:
Java类型转换(自动类型转换+强制类型转换)相关推荐
- C++中的向上类型转换和向下类型转换+四种强制类型转换
转自博客:http://blog.csdn.net/wangweitingaabbcc/article/details/7720979# 在c++的世界中有这样两个概念,向上类型转换,向下类型转换,分 ...
- Java基础篇:强制类型转换
在java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...
- 自动与强制类型转换小总结
一: 普通类型的类型转换: 当较低类型的数据转换为较高类型时,一般只是形式上有所改变, 而不影响数据的实质内容,(自动) 而较高类型的数据转换为较低类型时则可能有些数据丢失.(强制) 如int a=( ...
- Java的知识点6—— 强制类型转换、基本类型转化时常见错误和问题、 简单的键盘输入和输出
强制类型转换 强制类型转换,又被称为造型,用于显式的转换一个数值的类型.在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出. public class Test2 {pu ...
- java Vector.toArray 与强制类型转换
今天写程序的时候碰到这样的问题: public String[] getPlatformIDList() { Vector result = new Vector(); ...
- java强转float_Java强制类型转换
将较长的数据类型转换成较短的数据类型,只能用强制类型转换.形如: short s; Byte b = (byte)s; 7种类型的顺序排列如下: byte < (short = char) &l ...
- linux 强制类型转换,转载 指针强制类型转换
当我们初始化一个指针或给一个指针赋值时,赋值号的左边是一个指针,赋值号的右边是一个指针表达式.在我们前面所举的例子中,绝大多数情况下,指针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式 ...
- c语言数组变量的类型转换,C语言强制类型转换
概要: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个地址就是硬件访问的依据,而名字只是提供给 ...
- html强制类型转换,前端-JS强制类型转换之转换成数字类型
在上一篇博客<前端-数据类型>中我们说到JavaScript的数据类型.那么下面我们介绍一下JavaScript数据类型强制转换成数字类型. 代码示例 下面的代码中,主要实现将一个全部是数 ...
- Java数组 强制类型转换
数组的强制类型转换 数组的强制类型转换 数组类型转换的问题为什么会出现在我脑海中? 数组的强制类型转换 最重要的是!!!最开始的时候声明的数组类型!!! 最重要的是!!!最开始的时候声明的数组类型!! ...
最新文章
- Codeforces Round #469 (Div. 2) A/B
- 脚本没有类似C语言的预编译,开源脚本库
- 数据恢复专业基础之python解释NTFS runlist的代码
- ArcGIS中QueryTask,FindTask,IndentifyTask 之间的区别
- POJ-4004:数字组合(用位移方法解组合数问题,Java版)
- 剑指offer--51.表示数值的字符串
- 51nod 1435 位数阶乘 (手动计算)
- undefined reference to `cv::VideoCapture::VideoCapture()'
- leetcode组队学习——查找(一)
- okhttp教程——起步篇
- 【短时能量】基于matlab语音信号短时能量【含Matlab源码 1719期】
- AMEsim fatal error U1077解决方案之一
- 无人驾驶相关文献阅读体会
- 微信终于能注册小号了,无需绑定手机号!
- 【SQLite】C++链接SQLite读数据乱码问题(非中文)
- 短信工具类——mo信通
- (五十三)Credit VaR的计算
- 春赏百花秋望月,夏沐凉风冬听雪
- Android APP过检安全整改
- AI智能写作将改变文学创作的未来?