------- android培训、java培训、期待与您交流! ----------
在Java语言中,Java是不支持C语言还有C++语言中的指针、结构体类型以及共用类型的。
在Java语言中,简单(或基本)数据类型分了以下八种:
字节型(byte)、短整型(short)、整型(int)、长整型(long)、字符型(char)、浮点型
(float)、双精度型(double)、布尔型(boolean)
在这些当中,又可以分为四组:
1、整数:该组包括字节型(byte)、短整型(short)、整型(int)、长整型(long)、它们有符
号整数。
2、浮点型数:该组包括浮点型(float)、双精度型(double)、它们代表有小数精度要求的数字。
3、字符:这个组包括字符型(char),它代表字符集的符号,例如字母和数字。
4、布尔型:这个组包括布尔型(boolean),它是一种特殊的类型,表示真(true)/假(false)值
。
各个数据类型在内存中所占用的内存如下表,因为Java语言具有可移植性,所在在内存的占用上面,
各种机型都是一样的:
序号 简单类型 大小/位数 范围/精度
1 float 4 字节/32位 32位IEEE 754单精度
2 double 8 字节/64位 64位IEEE 754双精度
3 byte 1字节/8位 -128到127
4 short 2 字节/16位 -32,768到32,767
5 int 4 字节/32位 -2,147,483,648到2,147,483,647
6 long 8 字节/64位 -9,223,372,036,854,775,808到9,223,372,036, 854,775,807
7 char 2 字节/16位 整个Unicode字符集
8 boolean 1 位 True或者false
整型数据
一、整型常量
和C/C++相比,Java的整型常量具有以下三种形式:
1、十进制整数:如:123、-456、0……等等
2、八进制整数:以“0”开头的,如:0123表示十进制数83,-011表示十进制数-9……等等
3、十六进制整数:以“0x”或“0X”开头,如:0x123表示十进制数291,-0X12表示十进制数-18。
对于 int 型的整型常量在机器中占32位,而对于long型的常量在机器中要占用64位,并且在表示
long型的时候,要在后面加上“l”或“L”符号来表示,如:123l、456L……等等。
二、整型变量
整型变量的类型有四种,分别是:byte、short、int、long。
对于以上四种类型,int类型是最常使用的。但对于大型计算,常会遇到很大的整数,超出int类型所
表示的范围,这时,就要使用long型。
由于不同的机器对于多字节数据的存储方式不同,可能是从低字节向高字节存储,也可能是从高字节
向低字节存储,这样,在分析网络协议或文件格式时,为了解决不同机器上的字节存储顺序的问题,就用
byte类型来表示数据是合适的。而通常情况下,由于其表示的数据范围很小,容易造成溢出,应避免使用
。
short类型则很少使用,它限制数据的存储为先高字节,后低字节,这样在某些机器中会出错 。
实型(浮点型)数据
一、实型常量
与C/C++相同,Java的实常数有两种表达形式:
1、十进制数形式。有数字和小数点组成,并且必须有小数点,如:0.123、.123、123.、123.0……
等等都可以。
2、科学记数法形式。如:123e4或者123E4,其中,“e”或者“E”前面必须有数,并且后面的指数
必须是整数。
实常数在机器中占64位,具有double型的值。对于float型的值,则要在数字后面加上“f”或者“F
”,如:12.3f或45.6F,它在机器中占32位,表示的精度较底。
字符型数据
一、字符型常量
字符型常量是用单引号('')括起来的一个字符,如:'a'、'B'……等等。另外,Java也提供一些转
义字符,以反斜杠“/”开头,各种转义字符的意思如下:
/ddd 1到3位8进制数据所表示的字符(ddd)
/uxxxx 1到4位16进制数所表示的字符(xxxx)
/' 单引号字符 // 反斜杠字符
/r 回车 /n 换行
/f 走纸换页 /t 横向跳格
/b 退格
但还是要注意:与C/C++不同,Java中的字符型数据是16位无符号型数据,它表示Unicode集,而不仅
仅是ASCII集,例如:/u0061表示ISO拉丁码的‘a’。
二、字符型变量
和C/C++不一样,Java中的字符型数据不能作为整数来用,因为Java不提供无符号整数类型。但是,
同样可以当作整数来操作,如下例子:
int three = 3 ;
char one = '1' ;
char four = ( char ) ( three + one ) ;
在上例中,在计算加法时,字符型变量one被转化成整数进行相加,最后把结果又转化成字符型。
三、字符串常量
与C/C++不同,Java的字符串常量是作为String类的一个对象来处理的,而不是一个数据。
与C/C++相同,Java的字符串常量也是用“""”括起来的一组字符。
布尔型数据
布尔型数据只有两个值,true(真)和false(假),且它们不对应于任何整值。在流控制中常用到
它。
现在,请看下面的这个例子,用到了前面讲的全部数据类型,并且通过显示器显示它们:
public class SimpleTypes
{
public static void main( String args[] )
{
byte b=0x55;
short s=0x55ff;
int i=1000000;
long l=0xfffL;
char c='c';
float f=0.23F;
double d=0.7E-3;
boolean bool=true;
System.out.println("b = "+b);
System.out.println("s = "+s);
System.out.println("i = "+i);
System.out.println("l = "+l);
System.out.println("c = "+c);
System.out.println("f = "+f);
System.out.println("d = "+d);
System.out.println("bool = "+bool);
}
}
编译并运行该程序,输出结果为:
C:/>java SimpleTypes
b = 85
s = 22015
i = 1000000
l = 4095
c = c
f = 0.23
d = 0.0007
bool = true
各类数值型数据之间的混合运算
一、自动类型转换
在整型、实型、字符型数据之间,不同类型之间可以混合运算,但是必须先转换成同一类型,然后进
行运算,其转换的规则是:
① ( byte 或 short ) op int → int
② ( byte 或 short 或 int ) op long → long
③ ( byte 或 short 或 int 或 long ) op float → float
④ ( byte 或 short 或 int 或 long 或 float) op double → double
⑤ char op int → int
箭头左边表示参与运算的数据类型,op为运算符(如加、减、乘、除等),右边表示转换成进行运算
的数据类型。
二、强制类型转换
高级数据要转换成低级数据,需用到强制类型转换,如:
int i;
byte b=(byte)i; //把int型变量“i”强制转换为byte型
这种使用可能会导致溢出或精度的下降,最好不要使用。
补充内容
Java的简单数据类型
Java中的所有数字变量都是有符号的,Java不允许数据类型之间随意的转换。只有数字变量之间可以
进行类型转换。比如,boolean就不能转换为其他数据类型,而且其他数据类型也不能转换为boolean。
因为Java的简单数据类型都经过准确定义,而且直接内存访问也是不允许的,所以在Java语言中取消
了sizeof运算符。
Java的简单数据类型并不是对象。为了采用面向对象方式对待Java简单数据类型,你需要首先用类封
装它们。
封装类
Java还提供了Byte、Short、Boolean、Character、Integer、Double、Float和Long等内置的封装类
。这些封装(wrapper)类提供了很直观的实用方法。比如:Byte、Float, Integer、Long和Double类都
具有doubleValue()方法,通过它可以把存储在类的实例中的值转换为Double类型。还有,所有的封装类
都提供了静态的valueOf(String s)方法把给定的String转换为对应的简单类型。清单A的代码演示了这些
封装类的一些用法。
简单数据类型初始化
在Java语言中,简单数据类型作为类的成员变量声明时自动初始化为默认值,除非显式地声明。简单
数据类型为某一方法声明局部变量时不会自动地初始化而且会导致编译器扔出类似以下的错误消息
“Variable x may not have been initialized.(x变量没有初始化)”表B定义了Java简单数据类型的
默认值。
Java简单数据类型的默认值
类型 默认值
boolean false
Byte 0
short 0
int 0
Long 0
Char '/u0000'
Float 0.0
double 0.0
Java简单数据类型的默认初始值
上面的代码显示所有的Java简单数据类型都用做了Initialization类的成员变量。该例还显示
Initialization类的构造器中局部声明了一个int变量。在不修改以上代码的情况下,编译器会在对以上
代码进行编译的时候扔出错误。
一旦引发问题的代码行(那些引用未初始化变量导致错误发生的代码)被删除或者注释掉。程序成功
编译和执行之后就会显示以下的结果:
byte: 0
short: 0
int: 0
long: 0
float: 0.0
double: 0.0
char: 0
boolean: false
我们还可以显式地初始化成员变量为其他值,如以下代码所示:
byte b = 5;
short s = 123;
int i = 1234;
long l = 12345;
float f = 123.45f;
double d = 12345.678;
char c = 'A';
boolean z = true;