Java基本数据类型和注释

Java是一种强类型语言,必须为每一个变量声明一种类型。在Java中一共有8种基本数据类型,其中有4种整型,2种浮点型,1种字符类型(用于表示Unicode编码的代码单元),1种用于表示真值的boolean类型。

强类型语言:要求变量的使用严格符合定义,必须先定义后使用。一个变量如果被指定为某个数据类型,如果没有进行强制类型转换,他就永远是该类型了。

整型

整型用于表示没有小数部分的数值,允许是负数。Java提供了四种整型:

类型

存储需求

取值范围

int (默认)

4字节

-2 147 483 648~2 147 483 647

short

2字节

-32 768~32 767

long

8字节

-9 223 372 036 854 775 808~9 223 372 036 854 775 807

byte

1

-128~127

取值范围可以这样理解(以int举例):一个字节表示8位,因此4个字节有32位,一位可以表示2个字符,32位可以表示Java 整数验证 java 正整数_Java 整数验证个数字,正数,负数,0平均,然后正数是负数的绝对值减1即可。

在通常情况下,int类型最为常用,但是表示某些很大的数比如首富的钱数就要用长整型long。byte, short适合于特定场合,比如底层文件的处理或者存储空间很宝贵的大数组。如果有的数特别大甚至超过long的取值范围,我们也可以用科学计数法表示,但变量要声明为double,如下表示Java 整数验证 java 正整数_Java 整数验证_02

double num = 2E+10

长整型数值后缀有一个l 或者L,定义时应该按照如下格式定义:

long num = 1000L; 		//后边的L不能省略

但是在实际使用时,我们会发现有时候即便不加L或者l,编译时依然会通过,输出也正常,如下:

long num = 1000;		//对num打印输出的结果是1000;

上边已经指出,不声明时默认整型是int型,这里之所以没有报错是因为存在了自动类型转换,使int自动转换为long型,但是出现以下这种情况使,编译器就会报错:

Java 整数验证 java 正整数_数据类型_03

这是因为100 000 000 000 000 000已经超出了int类型的取值范围,因此就不会自动进行类型转换,从下图可以看出,当在数值后边加上L表明这是长整型时,编译通过。

Java 整数验证 java 正整数_数据类型_04

十六进制有一个前缀0X或者0x,如(0xCAFE)表示的就是一个十六进制数。

八进制有一个前缀0,例如010对应8进制的8,但是这种表示很容易混淆,因此最好不要使用8进制常数。

从Java 7.0开始,加上前缀0B或者0b,就可以写二进制数,例如0b1001就表示十进制数9。同样这个版本,可以位数字字面加下划线,如用1_000_000(或0B1111_0100_0010_0100_0000)表示100万,这些下划线只是为了让人易读,编译时会自动去除这些下划线。

浮点类型

浮点数用于表示有小数部分的数值,在Java种有两种浮点型:

类型

存储需求

取值范围

float

4字节

大约Java 整数验证 java 正整数_整型_05(有效位数6~7位)

double(默认)

8字节

大约Java 整数验证 java 正整数_Java 整数验证_06(有效位数15位)

double表示这种类型数值的精度时float的两倍,也成为双精度。float类型的数值后有一个F或者f,定义格式如下:

float num = 2.1f;		//后边的f不可以省略

如果没有f的浮点数值总是默认是double型,与long不同的是,如果缺少f,不论数值是否在float型的范围内,都会报错,因为double类型不能自动向float型转化。

下面是用于表示溢出和出错情况的三个特殊浮点值:

正无穷大:一个正数除以0的值,用常数Double.POISITIVE_INFINITY表示。

负无穷大:一个负数除以0的值,用常数Double.NEGATIVE_INFINITY表示。

NaN:计算0/0或者负数的平方根的结果,用常数Double.NaN

注意:Double.表示对于类的调用,后续会指出这种调用方式。所有的“非数值的值”比如NaN,虽然看上去一样,但是都是不同的,可以用Double.isNaN方法判断是否是非数值的值。此外,直接运行0/0之类的运算会抛出ArithmeticException,表示算术异常。

浮点值不适用于无法接受舍入误差的金融计算。例如:

System.out.println(2.0-1.1) //结果:0.8999999999999999

输出结果并非是我们认知的0.9,这种误差主要来源于浮点数值来源于二进制系统表示,而二进制系统无法准确表示分数Java 整数验证 java 正整数_数据类型_07,如果计算要求不允许有任何误差,就应该使用BigDecimal类。

字符类型

char类型原本用来表示单个字符,不过现在有的Unicode字符需要两个char值。

char类型字面量值要用单引号括起来。例如’A’是编码值为65的常量。与’A’不同的是,"A"表示的是一个字符A的值。我们目前可以这样理解,字符代表了一个常量,可以进行数值计算,并且结果可以根据类型可以转换为字符型或者整型,如下:

int i = 'A'-1;	//对i打印输出的结果是64,输出的为字符型

char i = 'A'-1;	//对i打印输出的结果是@,输出的为整型

char类型的值可以表示十六进制的值,范围从\u0000~\uFFFF,其中\u表示后边跟的数是十六进制数。

下边给出常见的转义序列:

转义序列

名称

Unicode值

\b

退格

\u0008

\t

制表

\u0009

\n

换行

\u000a

\r

回车

\u000d

\"

双引号

\u0022

\’

单引号

\u0027

\\

反斜杠

\u005c

这些转义序列都可以用于加引号的字符或者字符串中,例如"Hello,World\n",\u也可以用在字符串或者字符之外,例如public static void main(String\u005B\u005D args)也是正确的。其中\u005B和\u005D分别是[ 和 ]的编码。

**需要注意的是,Unicode转义序列会在代码解析前就进行处理。例如System.out,println("\u0022+\u0022")**打印的结果是一个空串,因为\u0022表示一个",那么运行时可以理解""+"",两个空串进行连接,结果还是空串。

boolean类型

boolean类型有两个值:false(默认值)和true,用来判定逻辑条件,与C++不同的是,整型值和布尔值不能相互转化,数值不能代替布尔值。

注释

在Java语言中有3种标记注释的方式,并且注释不会出现在可执行程序中。因此如果必要可以添加无限多的注释,而不需要担心代码膨胀。

  1. 最常用的注释方法是使用//,其注释内容从//开始到该行末尾;
  2. 当需要更长的注释,既可以在每行的注释前标记//,也可以用/* 和 */这一对注释界定符将需要注释的地方括起来,跨行进行注释。
  3. 这种注释可以用来自动地生成文档,这种注释从/**开始,到*/结束。