Java 数据类型分类

Java语言是强类型(strongly typed)语言,强类型包含两方面的含义:①所有的变量必须先声明、后使用:②指定类型的变量只能接受类型与之匹配的值。这意味着每个变量和每个表达式都有一个在 编译时就确定的类型。类型限制了一个变量能被赋的值, 限制了一个表达式可以产生的值,限制了在这些值上可以进行的操作,并确定了这些操作的含义。

强类型语言可以在编译时进行更严格的语法检查,从而减少编程错误。

声明变量的语法非常简单,只要指定变量的类型和变量名即可,如下所示:

type varName[ =初始值] ;

上面语法中,定义变量时既可指定初始值,也可不指定初始值。随着变量的作用范围的不同(变量有成员变量和局部变量之分,具体请参考本书5.3节内容),变量还可能使用其他修饰符。但不管是哪 种变量,定义变量至少需要指定变量类型和变量名两个部分。定义变量时的变量类型可以是Java 语言支持的所有类型。

Java语言支持的类型分为两类:基本类型(Primitive Type)和引用类型( Reference Type)。

基本类型包括boolean类型和数值类型。数值类型有整数类型和浮点类型。整数类型包括byteshot int、long、 char, 浮点类型包括float 和double。

char代表字符型,实际上字符型也是一种整数类型,相当于无符号整数天。一个对

引用类型包括类、接口和数组类型,还有一种特殊的null 类型。所谓引用数据类型就限象的引用,对象包括实例和数组两种。实际上,引用类型变量就是一一个指针,只是Java

空类型(null type)就是null值的类型,1这种类型没有名称。因为null类型没有名称,所以不可能 声明一个null类型的变量或者转换到null类型。空引用(nul)是null类型变量唯一的值。 空引用(nul

在实际开发中,程序员可以忽略null类型,假定null只是引用类型的一个特殊直接量。

空引用(null)只能被转换成引用类型,不能转换成基本类型,因此不要把一个null值赋给基本数据类型的变量。

Java的基本数据类型分为两大类: boolean 炎型和数

值类型。而数值类型又可以分为整数类型和浮点类型,

整数类型里的字符类型也可被单独对待。因此常把Java

里的基本数据类型分为4类,如图3.8所示。

Java只包含这8种基本数据类型,值得指出的是,

字符串不是基本数据类型,字符串是一个类,也就是:

整型

通常所说的整型,实际指的是如下4种类型。

byte:一个byte类型整数在内存里占8位,表数

范围是: -128(-2)~ 127(27-1)。

short:一个 short类型整数在内存里占16位,表数范围是: -32768(-215)~ 32767(215-1)。

int:一个int类型整数在内存里占32位,表数范围是: -2147483648(- 231) ~ 2147483647(231-1)。 ➢long: 一个long类型整数在内存里占64位,表数范围是: ( 263)~ (263-1)。

int是最常用的整数类型,因此在通常情况下,直接给出一个整数值默认就是int类型。除此之外,有如下两种情形必须指出。

如果直接将一个较小的整数值(在byte或short类型的表数范围内)赋给一个byte或short变量, 系统会自动把这个整数值当成byte或者short 类型来处理。

如果使用一个巨大的整数值(超出了int类型的表数范围)时,Java不会自动把这个整数值当成long类型来处理。如果希望系统把一个整数值当成long类型来处理,应在这个整数值后增加1或者L作为后缀。通常推荐使用L,因为英文字母1很容易跟数字1搞混。

下面的代码片段验证了上面的结论。

下面代码是正确的,系统会自动把56当成byte类型处理

byte a = 56;

下面代码是错误的,系统不会把 999999999999当成long类型处理

所以超出int的表数范围,从而引起错误

long biqValue = 99999999999;

下面代码是正确的,,在巨大的整数值后使用L后缀,强制使用long类型 long bigValue29223372036854775807L;

Java中整数值有4种表示方式:十进制、二进制、八进制和十六进制,其中二进制的整数以0b  0B开头:八进制的整数以0开头;十六进制的整数以0x或者0X开头,其中10~15 分别以a~f (此从的a~f不区分大小写)来表示。

下面的代码片段分别使用八进制和十六进制的数。

//以0开头的整数值是八进制的整数

int octalvalue = 013;

//以0x或0X开头的整数值是十六进制的整数

int hexValuel = 0x13;

int hexValue2 = 0XaF;

在某些时候,程序需要直接使用二进制整数,二进制整数更“真实”,更能表达整数在内存中的存在形式。不仅如此,有些程序(尤其在开发-一些游戏时)使用二进制整数会更便捷。

Java7新增了对二进制整数的支持,二进制的整数以0b或者0B开头。程序片段如下。

//定义两个8位的二进制整数

int binVall = 0b11010100;

byte binVal2 = 0B01101001;

//定义一个32位的二进制整数,最高位是符号位

int binVal3 = 00100000000000000000000000000011;

System. out . println (binVa1l); //输出212

System. out.println(binVal2); // 输出105

System. out .println(binval3); //输出-2147483645

从上面粗体字可以看出,当定义32位的二进制整数时,最高位其实是符号位,当符号位是1时,表明它是一个负数,负数在计算机里是以补码的形式存在的,因此还需要换算成原码。

正如前面所指出的,整数值默认就是int类型,因此使用二进制形式定义整数时,二进制整数默认占32位,其中第32位是符号位:如果在三进制整数后添加1或L后缀,那么这个二进制整数默认占64位,其中第64位是符号位。

例如如下程序。

/*定义一个8位的二进制整数。该数值默认占32位,因此它是一个正数

只是强制类型转换成byte时产生了溢出,最终导致binVal4变成了-23
*/
byte binVal4市(byte) 0b11101001;

/*定义一个32位的二进制整数,最高位是1

但由于数值后添加了工后缀,因此该整数实际占64位,第32位的1不是符号位

因此binVal5的值等于2的31次方+2+1
*/
long binVal5二000000000000000000000

System. out.println(binVa14); //输出-23

System. out.println(binVal5); //输出2147483651

上面程序中粗体字代码与前面程序片段的粗体字代码基本相同,只是在定义二进制整数时添加了“L”后缀,这就表明把它当成long类型处理,因此该整数实际占64位。此时的第32位不再是符号位,因此它依然是一个正数。

至于程序中的byte binVal4 = (byte)0b11101001;代码,其中0611101001依然是一个32位的正整数,只是程序进行强制类型转换时发生了溢出,导致它变成了负数。

字符型

字符型通常用于表示单个的字符,字符型值必须使用单引号(') 括起来。Java 语言使用16 位的Unicode字符集作为编码方式,而Unicode被设计成支持世界上所有书面语言的字符,包括中文字符,因此Java程序支持各种语言的字符。

字符型值有如下三种表示形式。➢直接通过单个字符 来指定字符型值,例如'A'、 '9和0等。

如果把0- 6535范围内的一个int整数赋给char 类型变量,系统会自动把这个int整数当成ch型来处理。

下面程序简单示范了字符型变量的用法。

public static void main(String[] args){


//使用转义字符来作为字符值

char enterChar = '\r';

//使用Unicode编码值来指定字符值

char ch = '\u9999' ;

1/将输出一个'香'字符

System.out.println(ch);

1/定义一个'疯字符值

char zhong=‘疯'

//直接将一个char变量当成int类型变量使用

int zhongValue azhongi ialuel:

11直接把一个0~65535范围内的int整数赋给一个 char变量

//直接把一个0

system.out.println(c);
}

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值