数据类型

在java中一共有八种基本数据类型:其中整型四种、浮点型两种、1种字符类型、1种bool类型。

整型

对于整型类型,Java只定义了带符号的整型,因此,最高位的bit表示符号位(0表示正数,1表示负数)。各种整型能表示的最大范围如下:

  • byte:-128 ~ 127
  • short: -32768 ~ 32767
  • int: -2147483648 ~ 2147483647 (21亿)
  • long: -9223372036854775808 ~ 9223372036854775807

在java中,整型的范围与运行的机器无关,另外java没有任何无符号形式的int、long等,,java的最高位表示正负,若最高位是1则是负数,若最高位是0则是正数。对于byte及short很少使用,使用最多的是int类型,如果int不能够满足,则可以使用long类型。使用long类型,需要注意要在数的最后加上l或L。

public static void main (String [] args) {
    byte n1 = 1;
    short n2 = 100;
    int n3 = 1000000;
    long n4 = 9876543210L;
}

其他进制表示

  • 二进制,使用0b开头
  • 八进制,使用0开头
  • 十六进制,使用0x开头

尽量不要使用八进制,以0开头容易让人混淆。

浮点类型

浮点类型只有两种,float(1字节)和double(2字节),工作中,很少使用到float类型,因为它的精度不准确,有效位数只有6~7位。而double类型择优15位。float类型的数值有一个后缀f或F,没有后缀的浮点数总被认为是double类型。

public static void main (String [] args) {
    float PI = 3.14F;
    double x = 3.141592635;
}

浮点型有三个特殊输出,用于表示溢出和出错的情况。

  • 正无穷大
  • 负无穷大
  • NaN

常量Double.POSITIVE_INFINTY Double.NEGATIVE_INFINIT和Double.NaN分别表示这三个数值。

NaN不与任何值相对,包括NaN本身。

public class IntSty {
    /**
     * main方法
     * @return void
     *
     */
    public static void main (String [] args) {
        double n = Math.sqrt(-3);
        double m = n;

        if (m == n) {
            System.out.print(1);
        } else {
            System.out.print(0);
        }
    }
}

所以,判断一个数值是否为NaN需要使用Double.isNaN()方法

if (Double.isNaN(Math.sqrt(-3))) {
    System.out.print(1);
}

字符类型

char类型的字符要用单引号括起来。一个char类型在java中占16位,它可以表示十六进制值,范围为\u0000~\uFFFF。除了转意字符\u外,还有一些特殊字符,他们的unicode值如下:

转移序列 名称 Unicode值
\b 退格 \u0008
\t 制表符 \u0009
\n 换行 \u000a
\r 回车 \u000d
\" 双引号 \u0022
\’ 单引号 \u0027
\\ 反斜杠 \u005c

注意:不要在程序中使用char类型。

布尔类型

布尔类型的值只有两个:false和true。都是小写字母,和php不一样,php的false和true不区分大小写。另外,整型和布尔型之间不能进行转换。下面是一个常见的错误:

if (x = 0) {//...}  // 编译出错,因为x=0表达式不能转换为布尔值