Java基本数据类型详解

Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共有8种基本类型(primitive type),其中有4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。

整型

整型用于表示没有小数部分的数值,它允许是负数。Java提供了4种整型,具体内容如下表所示。

类型 存储需求 取值范围
int 4字节 -2 147 483 648 ~ 2 147 483 648(正好超过20亿)
short 2字节 -32 768 ~ 32 768
long 8字节 -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
byte 1字节 -128 ~ 127

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

长整型数值有一个后缀L或l(如4000000000L)。十六进制数值有一个前缀0x或0X(如0xCAFE)。八进制有i一个前缀0,例如010对应八进制中的8。

从Java7开始,加上前缀0b或0B就可以直接写二进制数。例如0b1001就是9.另外,同样是从Java7开始,还可以为数字字面量加下划线,如用1_000_000(或0b1111_0100_0010_0100_0000)表示一百万。这些下划线只是为了让人更易读。Java编译器会去除这些下划线。

package PrimitiveType;

public class PrimitiveType {
    
    public static void main(String[] args) {
        int num1 = 0b1001;
        int num2 = 1_000_000;
        int num3 = 0b1111_0100_0010_0100_0000;
        
        System.out.println(num1);
        System.out.println(num2);
        System.out.println(num3);
    }
}

运行程序输出:

9
1000000
1000000

\color{red}{注意,Java没有任何无符号(unsigned)形式的int、long、short或byte类型。}

浮点类型

浮点类型用于表示有小数部分的数值。在Java中有两种浮点类型,具体内容如下表所示。

类型 存储需求 取值范围
float 4字节 大约 ± 3.402 823 47E + 38F(有效位数为6~7位)
double 8字节 大约 ± 1.797 693 134 862 315 70E + 308(有效位数为15位)

float类型的数值有一个后缀F或f(例如,3.14F)。没有后缀F的浮点数值(如3.14)默认为double类型。当然,也可以在浮点数值后面添加后缀D或d(例如3.14D)。

\color{red}{所有的浮点数值计算都遵循IEEE 754 规范。}

具体来说,下面是用于表示溢出和出错情况的三个特殊的浮点数值:

  • 正无穷大 Double.POSITIVE_INFINITY
  • 负无穷大 Double.NEGATIVE_INFINITY
  • 不是一个数字 Double.NaN
    特别需要说明的是,不能使用 == 来检测一个特定值是否等于Double.NaN,应使用Double.isNAN方法。
package PrimitiveType;

public class PrimitiveType {
    
    public static void main(String[] args) {
        boolean bool1 = 1.0 / 0 == Double.POSITIVE_INFINITY;
        boolean bool2 = -1.0 / 0 == Double.NEGATIVE_INFINITY;
        boolean bool3 = Double.isNaN(0.0 / 0);
        
        System.out.println(bool1);
        System.out.println(bool2);
        System.out.println(bool3);
    }
}

运行程序输出:

true
true
true

char类型

char类型原本用于表示单个字符。不过,现在的情况已经有所变化。如今,有些Unicode字符可以用一个char值描述,另外一些Unicode字符则需要两个char值。

char类型的字面量值要用单引号括起来。例如:'A' 是编码值为65所对应的字符常量。它与 "A" 不同,"A" 是包含一个字符A的字符串。char类型的值可以表示为十六进制值,范围从 \u0000 到 \Uffff 。例如:\u2122 表示注册符号(™)。常用特殊字符的转义序列如下表。

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

\color{red}{注意,Unicode转义序列会在解析代码之前得到处理。}

例如,"\u0022 + \u0022" 并不是一个由引号包围加号构成的字符串("+")。实际上,\u0022 会在代码解析之前转换为 " ,这会得到( ""+"" ),也就是一个空串。

package PrimitiveType;

public class PrimitiveType {
    
    public static void main(String[] args) {
        String str = "\u0022 + \u0022";
        
        System.out.println(str);
        System.out.println("************************");
        System.out.println(str.equals(""));
    }
}

程序运行输出:


************************
true

boolean类型

boolean(布尔)类型有两个值:falsetrue ,用来判定逻辑条件。

\color{red}{注意,整型值和布尔值之间不能进行相互转换。}

在C++中,数值甚至指针可以替代boolean值。值 0 相当于布尔值 false,非 0 值相当于布尔值 true。在Java中不是这样!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容