Java编程语言的类型分为两类:基本类型和引用类型,相应的有两种数据值,即基本值和引用值。基本类型有布尔型和数值型。数值型有整型byte、short、int、long和char,以及浮点型float和double。本文来简单介绍Java的基本类型及基本值。
基本值不与其他基本值共享状态。其类型为基本类型的变量总是保存具有相同类型的基本值。基本类型的变量的值只能通过该变量上的赋值运算进行更改。
1. 整型和值
A. 类型介绍
- 对于byte,大小为8-bit,取值范围为-128~127(含-128和127)。
- 对于short,大小为16-bit,取值范围为-32768(-215)~32767(215-1)(含-32768和32767)。
- 对于int,大小为32-bit,取值范围为-2147473648(-231)~2147473647(231-1)(含-2147473648和2147473647)。
- 对于long,大小为64-bit,取值范围为-9223372036854775808(-263)~ 9223372036854775807(263-1)(含-9223372036854775808和9223372036854775807)。
- 对于char,大学为16-bit,取值范围为’\u0000’~’\uffff’(含’\u0000’和’\uffff’),即0~65535
B. 整数值
- 整数可以表示成十进制、十六进制或八进制。
十进制数字可以是单个ASCII字符0表示整数0;或者包含一个1~9之间的ASCII数字,可以选择在其后接一个或多个0~9之剑的ASCII数字表示一个正整数,如0,9,90。
十六进制数字包含前导ASCII字符0x,或者在0x后面接有一个或多个ASCII十六进制数字,可以表示正整数、0或负整数。值为10~15的十六进制数字分别用ASCII字母a~f表示。用作十六进制数字的每个字母可以为大写或小写,如0x0,0xe,0xffff。
八进制数字包含前导ASCII字符0,或者在0后面接有一个或多个0~7之间的ASCII数字,可以表示正整数、0或负整数,如00,07,0127。
- int类型值
int类型最大的正十进制、十六进制值和八进制值分别是2147473647、0x7ffffffff和017777777777,它们都等于231-1,int类型最小的负十进制、十六进制值和八进制值是-2147473648、0x80000000和020000000000,它们都等于-231。十六进制值0xffffffff和八进制值037777777777都表示十进制值-1。
如果int类型的十进制值大于2147473648或值2147473648不是作为一元运算符”-“的操作数出现在任何地方,或者如果十六进制或八进制int值不适合32位,那么会发生编译时错误。
- long类型值
如果整数带有ASCII字母L或l的后缀,则它是long类型(优先采用后缀L,因为字母l通常难以与数字1区分开来)。
long类型最大的正十进制、十六进制值和八进制值分别是9223372036854775807L、0x7fffffffffffffffL和0777777777777777777777L,它们都等于264-1,long类型最小的负十进制、十六进制值和八进制值是-9223372036854775808L、0x8000000000000000L和01000000000000000000000,它们都等于-263。十六进制值0xffffffffffffffff和八进制值03777777777777777777777都表示十进制值-1。
如果int类型的十进制值大于9223372036854775808L,或值9223372036854775808L不是作为一元运算符”-“的操作数出现在任何地方,或者如果十六进制或八进制long值不适合64位,那么会发生编译时错误。
C. 字符值
- 字符值被表示成字符或转义序列,它们被封闭在单引号中。字符值只能表示UTF-16代码单元,即被限制为\u0000~\uffff之间的值。增补字符必须被表示成字符序列内的一个代理对,或者一个整数,这取决于使用它们的API。
- 行是通过ASCII字符CR、LF或CR LF终止的,因此在开始单引号后面和结束单引号之前出现一个行终止符会出现编译时错误。
- 由于Unicode转义处理非常早,所以把值为换行的字符书写为’\000a’是不正确的。
D. 整数涉及的运算符
- 比较运算符<、<=、>、>=、==和!=
- 数值运算符
一元加、减运算符+和-
乘法运算符-、/和%
加法运算符+和-
递增运算符++
递减运算符—
移位运算符<<、>>和>>>
位运算符~、&、|和^
- 条件运算符?:
- 强制转换运算符
- 字符串串接运算符
2. 浮点型和值
A. 类型介绍
Java编程语言的每种实现都需要支持浮点值的两个标准集,称为浮点值集合和双精度浮点值集合。浮点型有float和double,从概念上讲他们与单精度32位和双精度64位格式IEEE754值和运算相关联。它不仅包括由符号和数量组成的正数和负数,还包括正0、负0、正无穷大、负无穷大和特殊的非数值(NaN)。
B. 浮点格式
任何浮点值集的有穷非0值的哦偶可以表示为s·m·2(e-N+1)的形式,其中s为+1或-1,m是一个小宇2N的正整数,e是-(2K-1-2)~2K-1-1之间的一个整数。IEEE实数表示法中,最高有效位为符号位,接下来是指数部分,最后是尾数中的小数部分。
具体内容可参看IEEE754
C. 浮点值
- 浮点数具有一下部分:
整数部分、十进制或十六进制小数点、小数部分、指数和类型后缀。浮点数可以写作十进制或十六进制值。对于十进制值,如果有指数则用ASCII字母e或E来表示,后面可以选择接带有符号的整数;对于十六进制值,统称需要指数,用ASCII字母p或P来表示,后面可以选择接带有符号的整数。
对于十进制浮点数,至少需要一位整数或小数部分,以及一个小数点、指数或浮点性后缀,所有其他部分是可选的;对于十六进制浮点数,至少需要一位整数或小数部分,必须要有指数,而浮点型后缀是可选的。
如果一个浮点树带有ASCII字母F或f这样的后缀,则它是float类型,否则它就是double类型,并且可以选择带上ASCII字母D或d这样的后缀。
如果非0浮点值过大,使得在四舍五入转换成其内部表示时它变成了一个IEEE754无穷大的数,那么就会发生编译时错误。程序通过使用诸如1f/0f或-1d/0d之类的常量转换,或者通过使用Float或Double类预定义的常量POSITIVE_INFINITY和NEGATIVE_INFINITY,可以表示无穷大的数,而不会产生编译时错误。
如果非0浮点值过小,使得在四舍五入转换成其内部表示时它变成0,那么就会产生编译时错误。但如果非0浮点值很小,使得在四舍五入转换成其内部表示时它变成一个非0的不正常数字,那么将不会发生编译时错误。
用于表示非数字值的预定义常量在类Float和Double中被定义为Float.NaN和Double.NaN。
除了用十进制和十六进制表示浮点值以外,Float类的intBitsToFloat方法和Double类的longBitsToDouble方法提供了一种依据十六进制或八进制正是在表示浮点值的方式。
- float类型值
最大的正有穷float值是3.4028235e38f,float类型最小的正有穷非零值是1.40e-45f。float中特殊非数字常量被预定义为Float,NaN。
- l double类型值
最大的正有穷double值是1.7976931348623157e308d,double类型最小的正有穷非零值是4.9e-324d。double中特殊非数字常量被预定义为Double,NaN。
3. 布尔类型和布尔值
A. boolean类型表示一个逻辑量,它具有两个可能的值,并通过true和false来指示
B. boolean涉及的运算符有
- 关系运算符==和!=
- 逻辑运算符!、&、^和|
- 条件运算符&&和||,以及?:
- 字符串串接运算符+
C. 只有boolean或Boolean表达式可用于控制流程语句中,并且作为条件运算符?:的第一个操作数。
D. 只允许把boolean值强制转换为boolean或Boolean;不允许在类型boolean上执行其他强制转换。可以通过字符串转换把boolean转换为一个字符串。