Java基本类型

Java是强类型的语言,这意味着必须为每一个变量声明类型,根据最新(Java SE 14 Edition),Java一共有两种类型数据类型:primitiveType, referenceType。[1]

基本概念

整型

类型 存储需求 取值范围
byte 1 byte -128 ~ 127 ( -2^7 ~ 2^7-1)
short 2 bytes -32 768 ~ 32 767 ( -2^15 ~ 2^15-1)
int 4 bytes -2 147 483 648 ~ 2 147 483 647 ( -2^31 ~ 2^31-1 , 超过20亿)
long 8 bytes -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 ( 超过90万兆 )

byte 和 short 主要用于特定的场合,如底层的文件处理或者需要控制占用存储空间量的大数组, 与C, C++不同, Java整型的范围与运行Java代码的机器无关,这就解决了Java语言跨平台的问题,不会存在在32位系统与64位系统内存溢出等问题,且Java没有任何无符号(unsigned)形式的int, long, byte, short。

浮点类型

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

具体的float, double取值方范围计算可以参考IEEE 754[2]注意,浮点数不能用于无法接收舍入误差的金融计算中,因为二进制系统无法精确地表示分数 1/10, 如不允许舍入误差可以使用 BigDecimal

System.out.println(2.0 - 1.1) // 0.89999999999

char

char 类型大小为 2 字节,可以用16进制表示, 范围为 \u0000 ~ \Uffff (共65536个)

Unicode编码 与 char 类型

在计算机的发展过程中,出现了很多编码方式,也是我们在开发过程中经常会遇到乱码问题的原因,简单整理出现过的编码类型如下表。

编码类型 字节数 国家/组织 时间
ASCII 1 byte (标准ASCII码128个字符, 后128个为扩展ASCII码) 美国 1967年
GB2312-80 2 bytes 中国 1980年
GBK 2 bytes 中国 1995年
ISO-8859-1 1 byte ECMA 1987年
Unicode 1.0 2 bytes Unicode Consortium 1991年

这里具体介绍下Unicode, 在Unicode之前有很多编码标准,这就造成了两个问题:

  • 对于任意给定的代码值,在不同的编码方案下有可能对应不同的字母
  • 采用大字符集的语言其编码长度可能不同

设计Unicode编码规则的初衷就是解决以上两个问题,在20世纪80年度开始启动设计工作时,人们认为两个字节的代码宽度足以对世界上各种语言的所有字符进行编码,并可以给未来留下扩展空间,1991年发布的Unicode 1.0仅使用2个字节, 后来加入了大量的汉语、日语和韩语,很快 16 位的 char 类型已经不能满足需求了。

码点: 与一个编码表中的某个字符对应的代码值

代码级别(code plane):Unicode的代码级别可以分成17个代码级别:

  • 第一个代码界别成为基本的多语言级别(basic multilingual plane), 码点从U0000到UFFFF,其中包括京东的Unicode代码。
  • 其余的16个级别的码点从U+10000到U10FFFF, 其中包括一下辅助字符(supplementary character)

UTF-16编码采用了不同长度的编码标识所有的Unicode码点(code unit) 在基本的多语言级别汇中,每个字符用16位表示,通常被成为代码单元(code unit),而辅助字符采用一对连续的代码单元进行编码。

在Java 中, char类型描述了UTF-16编码的一个代码单元, 这里不建议在程序中使用 char 类型,除非确实需要处理UTF-16代码单元,最好将将字符串作为抽象数据类型处理。

可以使用Character 类中的 isJavaidentifierStartisJavaIdentifierPart来判断 java 是否支持该 Unicode 字符。

基本类型转换

图片上传失败

Java数值类型转换规则如上图,实线表示无京都损失,虚线表示存在精度损失,简单总结规则:

  • 两数中存在一个double类型,则另一个会转换为double类型
  • 两数中存在一个float类型,则另一个会转换为float类型
  • 两数中存在一个long类型,则另一个会转换为long类型
  • 否则,两个操作数转化为int类型

强制类型转换

关于数值类型的强制类型转换有几点注意点:

byte a = 1;
byte b = a + 1; // throw error
byte b = (byte) (a + 1); // rihgt

第二行代码会报错,原因在于:根据上面介绍的规则,对 b 进行赋值运算时右边式子的值会转化为 int 类型,此时需要 加上强制类型转换才行。

byte a = 1;
a += 1.0; // euqals to   a = (byte) a + 1.0 ---  a = 2

上述代码第二行不会报错,因为当二元运算符左边的类型与右边的类型不同时将会自动发生强制类型转换。

欢迎大家留言评论,感兴趣可以来Github参观,Star,Fork,PR三连

Reference

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

推荐阅读更多精彩内容