原创 LFJ3-1 - JAVA的数据类型

2011-9-21 00:12 1386 2 2 分类: 软件与OS
JAVA的数据类型与运算符继承自C、C++,当然要简单得多

§2.1数据类型
数据类型指明了变量或表达式的状态和行为。Java的数 据类型如下所示:

Java不支持C、C++中的指针类型、结构体类型和共用体类型。

本章我们主要介绍简单类型。

§2.2常量与变量
一、常量

Java中的常量值是用文字串表示的,它区分为不同的类型 ,如整型常量123,实型常量1.23,字符常量‘a’,布尔常量true、 false以及字符串常量"This is a constant string."。 与C、C++不同,Java中不能通过#define命令把一个标识符定 义为常量,而是用关键字final来实现,如final doublePI=3.14159(有 关final的用法见[6.2.3])。

二、变量

变量是Java程序中的基本存储单元,它的定义包括变量名 、变量类型和作用域几个部分。

①变量名是一个合法的标识符,它是字母、数字、下划 线或美元符"$"的序列,Java对变量名区分大小写,变量名不能 以数字开头,而且不能为保留字。合法的变量名如:myName、 value-1、dollar$等。非法的变量名如:2mail、room#、class(保留 字)等,变量名应具有一定的含义,以增加程序的可读性。

②变量类型可以为上面所说的任意一种数据类型。

③变量的作用域指明可访问该变量的一段代码。声明一 个变量的同时也就指明了变量的作用域。按作用域来分,变量 可以有下面几种:局部变量、类变量、方法参数、例外处理参 数。局部变量在方法或方法的一块代码中声明,它的作用域 为它所在的代码块(整个方法或方法中的某块代码)。

类变量在类中声明,而不是在类的某个方法中声明,它的 作用域是整个类。

方法参数传递给方法,它的作用域就是这个方法。

例外处理参数传递给例外处理代码,它的作用域就是例 外处理部分。

在一个确定的域中,变量名应该是唯一的。通常,一个域 用大括号{}来划定。

有关类变量、参数传递以及例外处理将分别在[6.7.1]、 [6.2.4]型计算,常会遇到很大的整数,超出int类 所表示的范围,这时要使用long类型。

由于不同的机器对于多字节数据的存储方式不同,可能是 低字节向高字节存储,也可能是从高字节向低字节存储,这样,在 分析网络协议或文件格时,为了解决不同机器上 的字节存储顺序问题,用byte类型来表示数据是合适的。而通常 情况下,由于其表示的数据 范围很小,容易造成溢出,应避免使用。

short类型则很少使用,它限制数据的存储为先高字节,后低字 节,这样在某些机器中会出 错。

三、整型变量的定义,如:

byte b;//指定变量b为byte型

short s;//指定变量s为short型

int i;//指定变量i为int型

long l;//指定变量l为long型

§2.4浮点型(实型)数据
一、实型常量

与C,C++相同,Java的实常数有两种表示形式:

①十进制数形式,由数字和小数点组成,且必须有小数点,如0 .123,.123,123.,123.0

②科学计数法形式。如:123e3或123E3,其中e或E之前必须有数 ,且e或E后面的指数必须为整数。实常数在机器中占64位,具有double型的值。对于float型的值, 要在数字后加f或F,如 12.3F,它在机器中占32位,且表示精度较低。

二、实型变量

实型变量的类型有float和double两种,下表列出这两种类型所 占内存的位数和其表示范 围。

数据类型所占位数数的范围

float 323.4e-038~3.4e+038

double 641.7e-308~1.7e+308

双精度类型double比单精度类型float具有更高的精度和更大 表示范围,常常使用。

三、实型变量定义,如

float f;//指定变量f为float型

double d;//指定变量d为double型

[注]与C、C++不同,Java中没有无符号型整数,而且明确规定了 整型和浮点型数据所占的 内存字节数,这样就保证了安全性、鲁棒性和平台无关性。

§2.5字符型数据
一、字符常量

字符常量是用单引号括起来的一个字符,如‘a’,‘A’。? 外,与C、C++相同,Java也提供转 义字符,以反斜杠(\)开头,将其后的字符转变为另外的含义,下? 列出了Java中的转义字符。

与C、C++不同,Java中的字符型数据是16位无符号型数据,它表 示Unicode集,而不仅仅是 ASCII集,例如\u0061表示ISO拉丁码的‘a’。

转义字符描述

\ddd1到3位8进制数据所表示的字符(ddd)

\uxxxx1到4位16进制数所表示的字符(xxxx)

\'单引号字符

\\反斜杠字符

\r回车

\n换行

\f走纸换页

\t横向跳格

\b退格

二、字符型变量

字符型变量的类型为char,它在机器中占16位,其范围为0~655 35。字符型变量的定义如∶

charc='a';//指定变量c为char型,且赋初值为'a'

与C、C++不同,Java中的字符型数据不能用作整数,因为Java不 供无符号整数类型。但 是同样可以把它当作整数数据来操作。

例如:

intthree=3;

charone='1';

charfour=(char)(three+one);//four='4'

上例中,在计算加法时,字符型变量one被转化为整数,进行相加,最后把结果又转化为字 符型。

三、字符串常量

与C、C++相同,Java的字符串常量是用双引号("")括起来的一串 字符,如"Thisisastring.\n"。但 不同的是,Java中的字符串常量是作为String类的一个对象来处理, 而不是一个数据。有关 类String,我们将在第七章讲述。

§2.6布尔型数据
布尔型数据只有两个值,true和false,且它们不对应于任何整 值。在流控制中常用到它

。 布尔型变量的定义如:

boolean b=true;//定义b为布尔型变量,且初值为true

JAVA也支持C的类型隐式转换与强制转换

一、自动类型转换

整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型

,然后进行运算。转换从低级到高级,如下图:

转换规则为:

①(byte或short)opint→int

②(byte或short或int)oplong→long

③(byte或short或int或long)opfloat→float

④(byte或short或int或long或float)opdouble→double

⑤charopint→int

其中,箭头左边表示参与运算的数据类型,op为运算符(如加 减、乘、除等),右边表示 转换成的进行运算的数据类型。

例2.2

public class Promotion{

public static void main(Stringargs[]){

byte b=10;

char c='a';

int i=90;

long l=555L;

float f=3.5f;

double d=1.234;

float f1=f*b;//float*byte->float

int i1=c+i;//char+int->int

long l1=l+i1;//long+int->ling

double d1=f1/i1-d;//float/int->float,float-double->double}

}

二、强制类型转换

高级数据要转换成低级数据,需用到强制类型转换,如:

int i;

byte b=(byte)i;//把int型变量i强制转换为byte型

这种使用可能会导致溢出或精度的下降,最好不要使用

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
2
关闭 站长推荐上一条 /3 下一条