【导读】Java 提供了几类简单数据类型表示数字和字符,本文对其进行了分析讲解 |
数据类型
数据类型就是对内存位置的抽象表达。程序员可以利用多种数据类型:某些由编程语言定义,某些由外部库定义,还有些则由程序员来定义。很多编程语言都依赖于特定的计算机类型和对数据类型属性的具体编译实现,比如word 和integer 数据类型的大小等。另一方面,Java 的虚拟机负责定义其内置数据类型的各方面内容。这就意味着不管Java 虚拟机(JVM )运行在何等低级的操作系统之上,数据类型的属性都是完全一样的。
简单数据类型
简单数据类型是不能再简化的、内置的数据类型,由编程语言定义,表示真实的数字、字符和整数。更大、更复杂的数据类型可以采用简单数据类型的组合来定义。在大多数情况下,简单数据类型都具有其硬件等价物。比方说,int 简单类型有时存放在32 位硬件寄存器内。Java 提供了几类简单数据类型表示数字和字符。
简单数据类型通常划分为以下几种类别:实数、整数、字符和布尔值。这些类别中又包含了多种简单类型。比如说,Java 定义了两种简单类型:float 和double ,它们都属于实数类别,另外4 种简单类型:byte 、short 、int 和long 则都属于整数类别。此外还有一种简单类型char 则归于字符类型。布尔值类别只有一种简单类型:boolean 。表A 详细列出了Java 的简单数据类型.
表A Java 简单数据类型
简单类型 大小 范围/ 精度
float 4 字节 32 位IEEE 754 单精度
double 8 字节 64 位IEEE 754 双精度
byte 1 字节 -128 到127
short 2 字节 -32,768 到32,767
int 4 字节 -2,147,483,648 到2,147,483,647
long 8 字节 -9,223,372,036,854,775,808 到9,223,372,036, 854,775,807
char 2 字节 整个Unicode 字符集
boolean 1 位 True 或者false
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 简单数据类型的默认值。
表B Java 简单数据类型的默认值
类型
默认值
boolean
false
Byte
0
short
0
int
0
Long
0
Char
´u0000´
Float
0.0
double
0.0
Java 简单数据类型的默认初始值
清单B 中的代码显示所有的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;
小结
Java 定义了全套简单数据类型。此外,Java 取消了其他变成语言中的硬件和编译器依附,允许程序员把注意力转移到其他问题上来。在下一篇文章里,我们将继续讨论某些经常用到的、Java 定义的复杂数据类型,同时了解下如何利用它们来处理典型的编程问题。
来源于 : http://developer.51cto.com/art/200510/6614.htm
程序设计 :Java: 数据类型
From Wikibooks
Jump to: navigation , search
程序设计 :Java > 数据类型
目录[隐藏 ] |
<script type="text/javascript"> //<![CDATA[ if (window.showTocToggle) { var tocShowText = "显示"; var tocHideText = "隐藏"; showTocToggle(); } //]]> </script> [编辑 ] 上下文链接
[编辑 ] 数据类型
数据类型是程序设计语言描述事物、对象的方法。 Java 数据类型分为内置类型和扩展类型两大类。内置类型就是 Java 语言本身提供的基本数据类型,而扩展类型则是 Java 语言根据基本类型扩展出的其他类型。扩展类型可以使 Java 核心库中的,也可以程序员根据需要自己扩展。
[编辑 ] 内置类型
Java 包括如下几种内置类型:
类型名称 | 类型定义 | 类型取值 |
boolean | 布尔值,作二元判断 | true , false |
byte | 8 位有符号整数 | 最小值 -128 ,最大值 127 |
short | 16 位有符号整数 | 最小值 -32768 ,最大值 32767 |
int | 32 位有符号整数 | 最小值 -2147483648 ( -231 ),最大值 2147483647 ( 231 -1 ) |
long | 64 位有符号整数 | -263 ~(263 -1) |
float | 32 位浮点数 | 1.4E-45~3.4028235E38 |
double | 64 位浮点数 | 4.9E-324~1.7976931348623157E308 |
char | 16 位 Unicode 字符 | 不适用 |
内置类型也称作基本类型( Primitive Types ),是其他类型的基础。所有的其他类型(包括 Java 核心库和用户自定义类型)都是通过基本类型扩展而来的。这些类型是我们描述对象最基本的方式。比如:判断是否使用 boolean ;衡量大小、长度使用各种整型(包括 short , int , long )和浮点数( float 和 double );表达字符使用 char ;而处理二进制数据块使用 byte 。
[编辑 ] 浮点值的精度
浮点值与我们通常所使用的小数是不同的。在使用中,它往往是难以确定的。常见的问题是定义了一个浮点数,经过一系列的计算,在数学上,它本来应该等于某个确定值。但是使用相等运算符 (==) 进行判断时,往往得出的结论是不等;或者本来应该大于 / 小于某个特定值,结果却可能刚好相反。因此,对于浮点值比较时,不能简单地使用 ==, >, < 等运算符。
我们做计算时,往往都有一个精度,或由于客观事实,或由于我们的需要。这样我们比较两个浮点数时,就不是简单的使用比较运算符了,而是在允许的精度之内作比较。比如:比较两个浮点数 (f1, f2) 是否相等,精度为 p
| f1 - f2 | < p
----------
''true''
| f1 - f2 | > p
----------
''false''
上面的 || 表示绝对值运算, java.lang.Math 类对绝对值运算提供了支持。 同样,比较 f1 是否大于 f2 ,如下:
( f1 - p ) > f2
----------
''true''
这种方法适用于大多数数据处理情况,但也有时候,必须是完全精确计算,这样就不能使用这种方法了,而应该采用 java.math.BigDecimal 和 java.math.BigInteger 来计算。
关于浮点数精度问题还可以参看 您的小数点到哪里去了
[编辑 ] 值类型与引用类型
值类型与引用类型的区分是通过变量赋值来区分的。值类型在赋值时,把值传递给被赋值对象,而引用类型只把对象的引用传递给被赋值对象,举个例子:
来源 : http://zh.wikibooks.org/wiki/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1:Java:%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B