java 基本数据类型及自动类型提升

1.Java的8种基本数据类型及其所占空间大小:

  boolean  8bit/1byte

byte      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

时间: 2024-10-11 22:33:08

java 基本数据类型及自动类型提升的相关文章

Java基本数据类型与包装类型(转)

基本数据类型的包装类 为什么需要包装类? Java并不是纯面向对象的语言.Java语言是一个面向对象的语言,但是Java的基本数据类型却不是面向对象的.但是我们在实际使用中经常需要将基本数据转化成对象,便于操作.比如:集合的操作中,这是,我们就需要将基本类型数据转化为对象. 包装类均位于java.lang包,使用时不需要导入,系统自动导入.Java中的8个包装类分别是:Byte,Short,Integer,Long,Float,Double,Character,Boolean它们的使用方式都是一

java中"自动类型提升”问题

byte a =1; byte b = 2; byte c  =3; c = a + b;(这条语句会报错) 原因:java中在对基本数据类型变量进行算数运算或者是按位运算,只要类型比 int 小的(即char,byte或者short),那么在运算之前, 这些值都会被自动的转换成i int 类型,而变量c是 byte 类型这样赋值的话精度会损失报错. 原文地址:https://www.cnblogs.com/xiaomingstudy/p/10890337.html

JAVA-初步认识-第二章-自动类型提升&强制类型转换

一. 深入理解变量 在之前的讲解中,我们谈论的都是定义不同类型的变量时要注意的问题.这一节中,我们将变量投入运算,探索在运算过程中,应该遵守的规则. 在这里对上一节<变量的基本演示>做一个小结,主要有三点.直接书写数字常量时,系统会给常量一个默认的类型,如int和double,当书写的常量赋值给定义好类型的变量时,就会产生错误.还有就是书写的常量和本身默认的类型起冲突.最后一点就是在书写源程序的过程中,一定要采用英文字符. 二. 变量的运算规则 运算的两端都是相同类型才可以,不然无法进行运算.

转载 Java基本数据类型

Java语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定.由于是statical typed,导致Java语言也是强类型(Strong typed)的.强类型意味着每个变量都具有一种类型,每个表达式具有一种类型,并且每种类型都是严格定义的,类型限制了变量可以hold哪些值,表达式最终产生什么值.同时限制了这些值可以进行的操作类型以及操作的具体方式.所有的赋值操作,无论是显式的还是在方法调用中通过参数传递,都要进行类型兼容性检查. 1. 数据类

面试准备(四)Java基本数据类型

Java语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定.由于是statical typed,导致Java语言也是强类型(Strong typed)的.强类型意味着每个变量都具有一种类型,每个表达式具有一种类型,并且每种类型都是严格定义的,类型限制了变量可以hold哪些值,表达式最终产生什么值.同时限制了这些值可以进行的操作类型以及操作的具体方式.所有的赋值操作,无论是显式的还是在方法调用中通过参数传递,都要进行类型兼容性检查. 1. 数据类

【转】Java基本数据类型

原文网址:http://blog.csdn.net/bingduanlbd/article/details/27790287 Java语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定.由于是statical typed,导致Java语言也是强类型(Strong typed)的.强类型意味着每个变量都具有一种类型,每个表达式具有一种类型,并且每种类型都是严格定义的,类型限制了变量可以hold哪些值,表达式最终产生什么值.同时限制了这些值可以进行

2.4.5-Java语言基础(类型提升&amp;强制转换)

自动类型转换(也叫隐式类型转换) 强制类型转换(也叫显式类型转换) 类型转换的原理 什么时候要用强制类型转换? 表达式的 数据类型自动提升 ?  所有的byte型.short型和char的值将被提升到int型. ?  如果一个操作数是long型,计算结果就是long型: ?  如果一个操作数是float型,计算结果就是float型: ?  如果一个操作数是double型,计算结果就是double型. 分析 ?  System.out.println('a') 与System.out.printl

JAVA的数据类型

JAVA的数据类型:基本类型: 四类:整型:byte(1字节) ,short(2字节), int(4字节), long(8字节) (整数类型) 浮点型: float(4字节)  ,double(8字节) (小数类型) 字符型: char(2字节) 布尔型: boolean(不确定) 引用类型: 类:class 接口:interface

Java基本数据类型知识总结

Java基本数据类型一览表 原生类型 占位数 是否有符号位 最小值 最大值 默认值 包装类 备注 boolean 1 无 -- -- false Boolean boolean类型是孤独的皇后,她无法和其他类型转换 byte 8 有 -2^7=-128=Byte.MIN_VALUE 2^7-1=127=Byte.MAX_VALUE 0 Byte IO流中经常使用 char 16 无 '\u0000'=0=Character.MIN_VALUE '\uFFFF'=2^15*2-1=65535=Ch