java 基本数据类型及自动类型提升
2017-08-29 15:23
197 查看
1.Java的8种基本数据类型及其所占空间大小:
boolean 8bit/1bytebyte 8bit/1byte
char 16bit/2byte
short 16bit/2byte
float 32bit/4byte
int 32bit/4byte
long 64bit/8byte
double 64bit/8byte
2.Java自动类型转换
1)两种类型是彼此兼容的2)转换的目的类型占得空间范围一定要大于转化的源类型
正向过程:由低字节向高字节自动转换
byte->short->int->long->float->double
逆向过程:使用强制转换,可能丢失精度。
int a=(int)3.14;
3. Java数据类型自动提升(注意以下讨论的是二元操作符)
Java定义了若干使用于表达式的类型提升规则: 1)所有的byte型. short型和char型将被提升到int型(例外: final修饰的short, char变量相加后不会被自动提升。)
2)如果一个操作数是long形 计算结果就是long型;
3)如果一个操作数是float型,计算结果就是float型;
4)如果一个操作数是double型,计算结果就是double型;
另一种归纳方式(《Java核心技术卷I》P43):
如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。
否则,如果其中一个操作数是float类型,另一个将会转换为float类型。
否则,如果其中一个操作数是long类型,另一个会转换为long类型。
否则,两个操作数都转换为int类型。
eg 1:
1 Promote.java class promote 2 { 3 public static void main (string args[]) 4 { 5 byte b = 50; 6 char c = 'a'; 7 short s = 1024; 8 int i = 50000; 9 float f =5.67f; 10 double d =0.1234; 11 double result = (f * b) + (i / c) - (d * s); 12 } 13 }
讲解:
第一个表达式f * b中,b被提升为float类型,该子表达式的结果也提升为float类型。
第二个表达式i / c中,变量c被提升为int类型,该子表达式的结果提升为int类型。
第三个表达式d * s中,变量s被提升为double类型,该子表达式的结果提升为double型。
最后,这三个结果类型分别是float,int和double类型,想减后该表达式的最后的结果就是double类型。
5) 黙认浮点类型为double,float数据类型有一个后缀为" f "或" F "。
6) long类型有一个后缀,为" l " 或者" L "。
eg 2:
1 byte a = 1; 2 3 byte b = 2; 4 5 a = a+b; //编译出错自动类型提升成int 6 7 a += b; //自加没有自动类型提升问题
把高字节转成低字节,需要作强制类型转换. byte c=(byte)a+b;
eg 3:
1 byte b1=1,b2=2,b3,b6; 2 final byte b4=4,b5=6; 3 b6=b4+b5; 4 b3=(b1+b2); //会发生编译错误 5 System.out.println(b3+b6);
没有final修饰的变量相加后会被自动提升为int型,与目标类型byte不相容,需要强制转换(向下转型)。
4. Java强制类型转换
格式:目标类型 变量=(目标类型)源类型变量/常量eg:
int i=5;
byte j=(int)i;
注意:在强制类型转换中目标类型和源类型变量的类型始终没有发生改变
易错点:
byte b;
b=3;
b=(byte)b*3 //编译出错,因为(byte)的运算级别比*高,所以会先转换b后再*3
b=(byte)(b*3) //正确
参考博文:
http://blog.csdn.net/liang5630/article/details/37935383 http://blog.sina.com.cn/s/blog_66e7f79b0100ysd3.html
相关文章推荐
- java学习之旅10--基本数据类型自动转换_强制转型_类型提升问题
- java 基本数据类型及自动类型提升
- java 基本数据类型及自动类型提升
- Java中基本数据类型的自动拆箱和装箱
- Java基本数据类型自动转型溢出问题
- 黑马程序员_Java高新技术_基本类型数据的自动拆装箱及享元设计模式
- JAVA——基本数据类型对象包装类/自动装箱
- 加强eclipse的使用技巧。可变参数。基本数据类型自动装箱和拆箱。枚举。反射。数组反射的应用。ArrayList和HashSet。JavaBean
- Java八种基本数据类型的大小,以及封装类,自动装箱/拆箱的用法?
- JAVA——基本数据类型之间的自动转换
- Java表达式的数据类型自动提升问题
- java数据类型的自动提升
- Java高新技术【1】 (静态导入-可变参数-增强for循环-基本数据类型的自动拆箱与装箱)
- 重温一下基本数据类型以及自动提升数据类型的问题
- JAVA1.5新特性----基本数据类型的自动拆箱与装箱
- 《黑马程序员》java笔记->基本数据类型包装类及自动拆箱装箱原理,数组排序练习字符串切割
- JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法
- 关于java基本数据类型的包装类的自动装箱池的大小
- 黑马程序员--张孝祥Java高新技术-JDK1.5新特性(二)【基本数据类型的自动拆箱与装箱,枚举】以及享元设计模式
- Java中基本数据类型的自动拆箱和装箱