原始数据类型

翻译自
ORALCE 《JAVA TUTORIAL 》
Primitive Data Types

Java编程语言是静态类型的,这意味着所有变量必须先被声明才能使用。 这包括说明变量的类型和名称,如您已经看到的:

int gear = 1;

这样做会告诉你的程序,一个名为“gear”的字段存在,保存数字数据,初始值为“1”。变量的数据类型确定其可能包含的值,以及可能对其执行的操作。 除了int之外,Java编程语言还支持其他七种基本数据类型。 原始类型由语言预定义,并由保留关键字命名。 原始值不与其他原始值共享状态。 Java编程语言支持的八个基本数据类型有:

  • byte:
    字节数据类型是一个8位有符号二进制补码整数。 它的最小值为-128,最大值为127(含)。 字节数据类型可以用于在大型阵列中节省内存,实际上内存节省很重要。 它们也可以用于代替int,其限制有助于清晰你的代码; 变量范围有限的事实可以作为一种文档形式。

  • short:
    短数据类型是一个16位有符号二进制补码整数。 最小值为-32,768,最大值为32,767(含)。 如同字节,同样的准则适用:在节省内存确实重要的情况下,你可以用short在大型数组节省内存。

  • int:
    默认情况下,int数据类型是32位有符号二进制补码整数,最小值为-231,最大值为231-1。 在Java SE 8及更高版本中,可以使用int数据类型来表示无符号的32位整数,其最小值为0,最大值为232-1。 使用Integer类将int数据类型用作无符号整数。 有关详细信息,请参阅The Number Classes一节。 诸如compareUnsigned,divideUnsigned等的静态方法已经添加到Integer类中,以支持无符号整数的算术运算。

  • long:
    长数据类型是64位二进制补码整数。 签名long的最小值为-263,最大值为263-1。 在Java SE 8及更高版本中,您可以使用长数据类型来表示无符号的64位长,最小值为0,最大值为264-1。 当您需要的范围宽于int所提供的值时,请使用此数据类型。 Long类还包含compareUnsigned,divideUnsigned等方法,以支持unsigned long的算术运算。

  • float:
    float数据类型是单精度32位IEEE 754浮点数。 其范围范围超出了本讨论范围,但在Java语言规范的浮点类型,格式和值部分中指定。 与byte和short的建议一样,如果需要将大量数组的浮点数保存在内存中,请使用float(而不是double)。 不应将此数据类型用于精确值,例如货币。 为此,你将需要使用java.math.BigDecimal类。 数字和字符串涵盖了Java平台提供的BigDecimal和其他有用的类。

  • double:
    双数据类型是双精度64位IEEE 754浮点数。 其范围范围超出了本讨论范围,但在Java语言规范的浮点类型,格式和值部分中指定。 对于十进制值,该数据类型通常是默认选择。 如上所述,这种数据类型不应该用于精确的值,例如货币。

  • boolean:
    布尔数据类型只有两个可能的值:true和false。 将此数据类型用于跟踪true / false条件的简单标志。 该数据类型表示一位信息,但其“大小”不是精确定义的。

  • char:
    char数据类型是一个16位Unicode字符。 它的最小值为'\ u0000'(或0),最大值为'\ uffff'(或65,535)。

除了上面列出的八个基本数据类型之外,Java编程语言还通过java.lang.String类为字符串提供特殊支持。 将您的字符串包含在双引号内将自动创建一个新的String对象; 例如:

String s =“this is a string”;

字符串对象是不可变的,这意味着一旦创建,它们的值不能被更改。 String类在技术上不是原始数据类型,但是考虑到语言给予的特殊支持,你可能会倾向于认为它是这样的。 您将在Simple Data Objects中了解有关String类的更多信息。

默认值

当声明一个字段时,并不总是需要赋值。 声明但未初始化的字段将被编译器设置为合理的默认值。 一般而言,根据数据类型,默认值为零或为空。 然而,依赖于这样的默认值,通常被认为是坏的编程风格。

以下图表汇总了上述数据类型的默认值。

数据类型 默认值
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
String (or any object) null
boolean false

局部变量略有不同; 编译器从不将默认值分配给未初始化的局部变量。 如果您无法初始化您声明的本地变量,请确保在尝试使用该变量之前为其分配一个值。 访问未初始化的局部变量将导致编译时错误。

文字(Literals)

您可能已经注意到,在初始化原始类型的变量时,不会使用new关键字。 原始类型是语言内置的特殊数据类型; 它们不是从类创建的对象。 字面值是固定值的源代码表示; 文字直接在您的代码中表示,而不需要计算。 如下所示,可以为原始类型的变量分配文字:

boolean result = true;
char capitalC = 'C';
byte b = 100;
short s = 10000;
int i = 100000;

整数文字

如果以字母L或l结尾,则整数文字的长度为long; 否则为int类型。 建议您使用大写字母L,因为小写字母l与数字1难以区分。

整数类型byte,short,int和long的值可以从int文字创建。 类型long的值超过int的范围可以从长字面值创建。 整数字面值可以由这些数字系统表示:

  • 十进制:基数10,其数字由数字0到9组成; 这是你每天使用的号码系统
  • 十六进制:基数16,其数字由数字0到9和字母A到F组成
  • 二进制:基数2,其数字由数字0和1组成(您可以在Java SE 7及更高版本中创建二进制文字)

对于通用编程,十进制系统可能是您将要使用的唯一数字系统。 但是,如果需要使用另一个数字系统,以下示例显示正确的语法。 前缀0x表示十六进制,0b表示二进制:

// 十进制的26
int decVal = 26;
//  十六进制的26
int hexVal = 0x1a;
// 二进制的26
int binVal = 0b11010;

浮点文字

如果以字母F或f结尾,则浮点文字的类型为float; 否则它的类型是双倍的,它可以可选地以字母D或d结尾。

浮点类型(float和double)也可以使用E或e(用于科学记数法),F或f(32位浮点数字)和D或d(64位双字面值)来表示;这是默认值和 约定省略)。

double d1 = 123.4;
// 与d1的值相同,但用科学符号表示
double d2 = 1.234e2;
float f1  = 123.4f;

字符和字符串文字

char和String类型的字面量可能包含任何Unicode(UTF-16)字符。 如果您的编辑器和文件系统允许,您可以直接在代码中使用这样的字符。 如果没有,您可以使用“Unicode转义”,例如“\ u0108”(大写C带回声)或“S \ u00ED Se \ uFIF”(西班牙语西班牙语)。 对于字符文字,始终使用“单引号”和“双引号”。 Unicode转义序列可能在程序中的其他位置(例如字段名称)中使用,而不仅仅是char或String文字。

Java编程语言还支持char和String文字的一些特殊的转义序列:\ b(backspace),\ t(tab),\ n(换行),\ f(form feed),\ r(回车) \“(双引号),'(单引号)和\(反斜杠)。

还有一个特殊的空文字,可以用作任何引用类型的值。 null可以分配给任何变量,除了原始类型的变量。 除了测试其存在之外,您可以使用空值很少。 因此,在程序中经常使用null作为标记来指示某些对象不可用。

最后,还有一种特殊的字面意思,称为类文字,通过采用类型名称并附加“.class”; 例如String.class。 这是指代表类型本身的对象(类型为Class)。

在数字文字中使用下划线字符

在Java SE 7及更高版本中,任何数量的下划线字符(_)都可以出现在数字文字的数字之间的任何位置。 这个功能可以让你例如。 在数字文字中分隔数字组,这可以提高代码的可读性。

例如,如果您的代码包含多个数字的数字,则可以使用下划线字符分隔三个数字,与使用逗号或空格的标点符号作为分隔符类似。

以下示例显示了可以在数字文字中使用下划线的其他方法:

long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi =  3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;

您可以在数字之间放置下划线; 您不能在以下地方放置下划线:

  • 在数字的开头或结尾
  • 与浮点文字的小数点相邻
  • 在F或L后缀之前
  • 在预期有一串数位的位置

以下示例演示了数字文字中有效和无效的下划线展示位置(突出显示):

//无效:无法加下划线
//与小数点相邻
float pi1 = 3_.1415F;

//无效:无法加下划线
//与小数点相邻
float pi2 = 3._1415F;

//无效:无法加下划线
//在L后缀之前
long socialSecurityNumber1 = 999_99_9999_L;

// OK(十进制文字)
int x1 = 5_2;

//无效:无法加下划线
//在文字的末尾
int x2 = 52_;

// OK(十进制文字)
int x3 = 5_______2;

//无效:无法加下划线
//在0x radix前缀
int x4 = 0_x52;

//无效:无法加下划线
//在数字的开头
int x5 = 0x_52;

// OK(十六进制文字)
int x6 = 0x5_2;

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

推荐阅读更多精彩内容