J2SE学习笔记3 — Java基本语法(2)基本数据类型

3.2 Java基本数据类型

 

由于Java程序必须保证在所有机器上都能够得到相同的运行结果,所以每一种数据类型的取值范围必须固定。

Java中一共有8种基本类型,分别如下:

类别

用途

类型

存储需求

取值范围/有效位数

常量后缀

备注

 

用于表示没有小数部分的数值,它允许是负数

byte

1字节(8位)

-128~127

 

主要用于特定的应用场合

short

2字节(16位)

-32768~32767

 

int

4字节(32位)

-231~231-1(超过20亿)

 

最常用

long

8字节(64位)

-263~263-1(超过922337万亿)

L,如4000L

 

浮点型

用于表示有小数部分的数值

float

4字节(32位)

有效位数6-7

F

没有后缀F的浮点数值默认为double类型

double

8字节(64位)

有效位数15

D

字符型

表示单个字符

char

2字节(16位)

Unicode编码字符

 

 

布尔型

表示真假值

boolean

1

truefalse

 

 

注意:与C/C++不同,Java没有任何无符号类型。

 

1 整型

通常情况下,int类型最常用。但如果表示星球上的居住人数,就需要使用long类型了。byteshort类型主要用于特定的应用场合,例如底层的文件处理或者需要控制占用存储空间量的大数组。

:长整型数值后面必须加Ll

public class FirstSample

{

       public static void main(String[] args)

       {

              long i=9223372036854775807L;  //必须加后缀L

              System.out.println(i);

       }

}

如果写成long i=9223372036854775807;编译时会出错:

---------- 编译Java源程序 ----------

FirstSample.java:5: 过大的整数: 9223372036854775807

              long i=9223372036854775807;

                     ^  1 错误

 

2 浮点类型

   double表示这种类型的数值精度是float类型的两倍(双精度数值)。绝大部分应用程序都采用double类型,因为在很多情况下float类型的精度很难满足需求,因为它只有7位有效数字。特别注意浮点数值不适用于禁止出现舍入误差的金融计算中。

实际上,只有很少的情况下适合使用float类型,例如需要快速地处理单精度数据,或者需要存储大量数据时。

所有的浮点数值计算都遵循IEEE 754规范,下面是用于表示溢出和出错情况的三个特殊的浮点数值:

Ø  正无穷大:Doulbe.POSITIVE_INFINITY,例如一个正整数除以0的结果就是正无穷大;

Ø  负无穷大:Doulbe.POSITIVE_INFINITY

Ø  NaN(不是一个数字):Double.NaN,例如计算0/0或求一个负数的平方根的结果就是Nan

注:Doulbe.POSITIVE_INFINITYDoulbe.POSITIVE_INFINITYDouble.NaN与相应的Float类型的常量一样分别表示三个特殊的值,但在实际应用中很少遇到。另外,所有“非数值”的值都认为是不相同的,因此不能使用“==”来检测一个特定值是否等于Double.NaN,可以使用Double.isNan方法。例如:

if x == Double.NaN // is ERROR

if Double.isNanx))// check whether x is not a number”,is RIGHT

特别注意:

浮点数值不适用于金融计算中,因为浮点型数值存在舍入误差,例如:

System.out.println( 2.0 – 1.1) 打印出的是0.8999999999999999(没有后缀默认为double类型),而不是人们想象的0.9。其主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示分数1/10,这就好像十进制无法精确地表示1/3一样。

如果需要在数值计算中不含有任何舍入误差(精确表示),应该使用BigDecimal类(大数值)。“大数值”是一个能够表示任意精度的算术包,它并不是一种新的Java类型,而是一个Java对象。

3)字符类型(char

char类型用于表示单个字符(Unicode字符),因此需要2个字节的存储长度。字符类型数值用单引号表示,如‘A’表示编码为65所对应的字符常量,与“A”不同,采用双引号表示一个包含字符A的字符串。

Unicode编码单元可以表示为十六进制值,其范围从/u0000/uffff,例如/u2122表示注册符号,/u03C0表示希腊字母π。因此也可采用转义序列符/u表示Unicode字符,特别是表示一些不易输入的字符时。

另外还有一些用于表示特殊字符的转义序列符,如:

转义序列

 

Unicode

转义序列

 

Unicode

/b

退格

/u0008

/”

双引号

/u0022

/t

制表

/u0009

/’

单引号

/u0027

/n

换行

/u000a

//

反斜杠

/u005c

/r

回车

/u000d

 

 

 

所有这些转义序列符都可以出现在字符常量或字符串的引号内,例如 ‘/u2122’或“Hello/n”。不同的是/u还可以出现在字符常量或字符串的引号之外,而其他转义序列不可以。

例如:public static void main (String[] args)也可以写成public static void main (String/u005B/u005D args)

char a='A'; 等价于char a='/u0041';

   char a='A'; 等价于char a=65; //ASCII值表示

javaunicode编码:

Java中,char类型用UTF-16编码描述一个代码单元。

Unicode编码出现之前,已经有许多种不同的标准,如美国的ASCII、西欧的ISO8859-1、台湾的BIG5、中国大陆的GB118030gbk等,这就产生了以下两个问题:

n  一个代码值在不同编码方案下可能对应不同的字符;

n  采用大字符集的语言其编码长度可能不同,例如有的采用单字节编码,有的采用2个或更多的字节;

设计Unicode编码的目的就是解决这些问题。在设计Java时采用了16位的Unicode字符集,但是现在随着增加了大量的汉语、日语和韩国语言中的表意文字,Unicode字符超过了65536个,16位的char类型已经不能满足描述所有Unicode字符的需要了。因此建议不要在程序中使用char类型,除非确实需要对UTF-16代码单元进行操作。最好将需要处理的字符串用抽象数据类型表示。

  UTF-16编码可参考以下网址:

http://en.wikipe-dia.org/wiki/UTF-16

 4boolean类型

 boolean类型有两个值:truefalse,用来判定逻辑条件。与C/C++不同,在java中整型值与布尔值之间不能进行相互转换,而在C/C++中,数值或指针可以代替boolean值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值