Java基础-数据类型

本文详细介绍了Java中的基本数据类型,包括整数类型(byte、short、int、long)、浮点类型(float、double)、字符类型(char)和布尔类型(boolean)。此外,还探讨了这些类型的数据范围、默认值及自动与强制类型转换等内容。
Java中的基本类型 浮点:double、float 整数:byte、short、int、long 字符:char 布尔值:boolean int为 整数类型,在存储的时候,用 4个字节存储,范围为 -2,147,483,648到2,147,483,647,在变量初始化的时候,int类型的默认值为 0short:short也属于 整数类型,在存储的时候,用 2个字节存储,范围为 -32,768到32,767,在变量初始化的时候,short类型的默认值为 0,一般情况下,因为Java本身转型的原因,可以直接写为 0

long:long也属于整数类型,在存储的时候,用8个字节存储,范围为-9,223,372,036,854,775,808到9,223,372,036, 854,775,807,在变量初始化的时候,long类型的默认值为0L或0l,也可直接写为0

byte:byte同样属于 整数类型,在存储的时候,用 1个字节来存储,范围为 -128到127,在变量初始化的时候,byte类型的默认值也为 0float:float属于 浮点类型,在存储的时候,用 4个字节来存储,范围为 32位IEEEE 754单精度范围,在变量初始化的时候,float的默认值为 0.0f或0.0F,在初始化的时候可以写 0.0double:double同样属于 浮点类型,在存储的时候,用 8个字节来存储,范围为 64位IEEE 754双精度范围,在变量初始化的时候,double的默认值为 0.0char:char属于 字符类型,在存储的时候用 2个字节来存储,因为Java本身的字符集不是用ASCII码来进行存储,是使用的16位Unicode字符集,它的字符范围即是 Unicode的字符范围,在变量初始化的时候,char类型的默认值为 'u0000'boolean:boolean属于 布尔类型,在存储的时候不使用字节,仅仅使用 1位来存储,范围仅仅为 0和1,其字面量为 true和false,而boolean变量在初始化的时候变量的默认值为 false。 Java里面,每一种原始类型都对应着相应的包装类型,在JDK1.5之前(不包含JDK1.5),当包装类和原始类型进行相互转换的时候,需要调用包装类型的方法进行转换,不能通过操作符进行直接的计算。下边是一个原始类型和包装类型的一个对应表:
原始类型对应的包装类型默认值存储格式数据范围
shortjava.lang.Short02个字节-32,768到32767
intjava.lang.Integer04个字节-2,147,483,648到2,147,483,647
bytejava.lang.Byte01个字节-128到127
charjava.lang.Character/u00002个字节Unicode的字符范围
longjava.lang.Long0L或0l8个字节-9,223,372,036,854,775,808到9,223,372,036, 854,775,807
floatjava.lang.Float0.0F或0.0f4个字节32位IEEEE 754单精度范围
doublejava.lang.Double0.0或0.0D(d)8个字节64位IEEE 754双精度范围
booleanjava.lang.Booleanfalse1位true(1)或false(0)
类型转换 Java里面的类型转换包括两种: 自动转换(隐式转换);强制转换(显示转换)
自动转换:
  条件: A.这两种类型是兼容的; B.目的类型数的范围(位数)比来源类型的大
当以上2个条件都满足的时候, 拓宽转换(widening conversion)就会自动发生,例如,int类型范围比所有byte类型的合法范围大,因此不要求显示的强制转换语句。对于拓宽转换,兼容程度可以看下边的继承树:
  java.lang. Object
  |—java.lang. Boolean
  |—java.lang. Character
  |—java.lang. Number
    |—java.lang. Byte
    |—java.lang. Float
    |—java.lang. Integer
    |—java.lang. Long
    |—java.lang. Short
    |—java.lang. Double
  从上边的继承树可以可以看到, Boolean类型、Character类型、Number类型是两两 不兼容的,所以在隐式转换的过程,不兼容的类型是不能进行自动类型转换的
强制转换:
  尽管自动类型转换是很有帮助的,但并不能满足所有的编程需要。如果2种类型是兼容的,那么Java 将自动地进行转换。例如,把int 类型的值赋给long 类型的变量,总是可行的。然而,不是所有的类型都是兼容的,因此,不是所有的类型转换都是可以隐式实现的。例如,没有将double 型转换为byte 型的定义。幸好,获得不兼容的类型之间的转换仍然是可能的。要达到这个目的,你必须使用一个强制类型转换,它能完成两个不兼容的类型之间的显式变换。它的通用格式如下:
(target-type)value
关于类型的自动提升,遵循下边的规则: 所有的byte、short、char类型的值将提升为int类型;  如果有一个操作数是long类型,计算结果是long类型; 如果有一个操作数是float类型,计算结果是float类型; 如果有一个操作数是double类型,计算结果是double类型; 自动类型转换图如下: byte -> short(char) -> int -> long -> float -> double 如果是强制转换的时候,就将上边的图反过来 转换附加: 当两个类型进行自动转换的时候,需要满足条件:【1】这两种类型是兼容的,【2】目的类型的数值范围应该比源转换值的范围要大。(上边已经讲过了)而拓展范围就遵循上边的自动类型转换树,当这两个条件都满足的时候,拓展转换才会发生,而对于几个原始类型转换过程,根据兼容性boolean和char应该是独立的,而其他六种类型是可以兼容的,在强制转换过程,唯独可能特殊的是char和int是可以转换的,不过会使用char的ASCII码值比如: int a = (int)'a'; a的值在转换过后输出的话,值为97;
Java的基本类型里面有几点需要说明:
   [1]char类型是无符号16位整数,子面值必须用单引号括起来,如:'a'
   [2]String在Java里面是类,直接父类是java.lang. Object,所以String不属于Java里面的原始类型
   [3]长整数字有一个后缀为“L”或者“l”,八进制数字前缀为“0”,十六进制的前缀为“0x”
   [4]默认的基本浮点类型为double
   [5]float数据类型有一个后缀为“F”或“f”,Double数据类型后边可以跟“D”或者“d”,也可以不跟
   [6]char类型可以使用通用的转义字符,但是不是ASCII码,应该是Unicode格式的如'/u0000'

转载于:https://my.oschina.net/ecp/blog/635365

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值