博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 原生类型(翻译自Java Tutorials)
阅读量:7281 次
发布时间:2019-06-30

本文共 4567 字,大约阅读时间需要 15 分钟。

原文出自 

英文出自 

java编程语言是静态类型,这表示变量使用前必须声明。这涉及阐明该变量的类型和名称,如你已经看到了:

int gear = 1;

上面告诉你的程序,存在一个字段名为”gear”,存储数字的数据,初始值为“1”。变量的数据类型,决定它可以包含的值,还有它可以做的操作。对于int更多的是,java编程语言支持其他原生数据类型。原生类型是编程语言预定义的,而且类型名字也是保留字。原生类型的值,不会和其他原生类型的值共享状态。java编程语言支持八种原生类型:

byte:byte的数据类型是一个8位有符号的二进制补码整数。最小值是128,最大值是127(包括)。当节省内存很重要,byte数据类型在大数组中节省内存很有用。如果变量的值的限制有利于澄清代码,也可以用byte替代int;事实上,变量的范围限制,可以作为文档形式。

short:short数据类型是16位的有符号的补码整数。最小值是-32,768 ,最大值是32,767 (包括)。和byte相比,也有一样准则:当节省内存很重要,short数据类型在大数组中节省内存很有用。

int:int数据类型是32位的有符号的补码整数。最小值是-2,147,483,648 ,最大值是2,147,483,647 (包括)。对于完整的值,这个数据类型通常是默认选择,除非有其他原因(例如上述原因)。这个数据类型大多数情况下,足够你的程序使用整数。如果你需要一个更大范围的值,可以使用long。

long:long数据类型是64位的有符号的补码整数。最小值是-9,223,372,036,854,775,808 ,最大值是9,223,372,036,854,775,807 (包括)。当需要的值范围超过了int,就可以使用这个数据类型。

float:float 数据类型是单精度 32 位 IEEE 754 浮点数。它的值的范围超出了本讨论,但是可以参考java语言规范的浮点类型。和byte,short的建议一样,当你使用大量浮点数数组,需要节省内存,使用float。此数据类型永远不应该用于精确的值,如货币。为此,您将需要使用 java.math.BigDecimal 类来代替。Java 平台提供数字和字符串包括 BigDecimal 和的其他有用的类。

double:double数据类型是单精度 64 位 IEEE 754 浮点数。它的值的范围超出了本讨论,但是可以参考java语言规范的浮点类型。对于小数值,这个数据类型是默认选择。如上面的建议,此数据类型永远不应该用于精确的值。

boolean:boolean数据类型只有两个可能值:true和false.使用此数据作为简单标记来跟踪真/假条件。这种数据类型代表一个比特的信息,但它的“大小”没有明确界定。

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

除了上面列出的8个原生数据类型,java编程语言通过类java.lang.String提供字符串的特殊支持。使用两个双引号包围字符串,会自动创建String对象;例如,String s = "this is a string";String对象是不可变的,这表示它一旦被创建,它的值就不可变。类String从技术上讲,它不是一个原生类型,但是可以认为,它是java语言特殊支持的,你可能会倾向于认为它是原生类型。

 

默认值

当字段声明,未必一定要赋值。字段声明了,但是没有初始化,编译器将会设置一个合理的默认值。一般来说,默认值是0或者null,取决于数据类型。但是,依靠这种默认值,一般认为是糟糕的编程风格。

下面的图标总结上面涉及的数据类型的默认值。

 

Data Type Default Value (for fields)
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
String (or any object)   null
boolean false

 

局部变量略有不同,编译器不会给一个没有初始化的局部变量赋默认值。如果你没有在局部变量声明时,初始化变量,那么,你必须在使用它之前给它赋值。访问一个没有初始化的局部变量,编译器会报错。

 

常量

你可能注意到初始化原生类型的变量,不用使用new关键字。原生类型是java语言内置的特殊数据类型,不是类创建的对象。常量是源代码里表示的固定值。常量直接表示代码中不要求计算。如下显示,原生类型的变量可以赋值常量:

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

 

整数常量

如果整数常量结尾是字母L或者l,那么它是long类型,否则它就是int类型。推荐使用大写字母L,因为小写字母l和数字1很难区分。

从int常量,可以创建整数byte,short,int,long。long常量,可以创建超出int的范围的long类型的值。整数常量可以由下面数字系统表达:

十进制:10进制,包含从0到9的数字,这个是你每日都用的数字系统。

十六进制:16进制,包含0到9,字母A到F。

二进制:2进制,包含0到1的数字(Java SE 7和后续版本可以创建二进制常量)。

 

常规编程,十进制系统是使用的唯一的数字系统。但是,如果你在其它数字系统需要使用,下面的例子,演示正确语法。前缀0x指示十六进制,0b指示二进制:

// The number 26, in decimalint decVal = 26;// The number 26, in hexadecimalint hexVal = 0x1a;// The number 26, in binaryint binVal = 0b11010;

 

浮点常量

以字母F或者是f结尾的浮点常量是float类型,否则其它就是double类型,这里有个可选的选项是以字母D或者d结尾。

浮点型 (浮点和双精度) 也可以表示使用 E 或 e (科学记数法)、 F 或 f (32 位浮点常量) 和 D 或 d (64 位双精度浮点常量;这是默认设置,按照惯例可以省略)。

double d1 = 123.4;// same value as d1, but in scientific notationdouble d2 = 1.234e2;float f1 = 123.4f;

 

字符和字符串常量

char和String常量包含任意Unicode (UTF-16)字符。如果编辑器和文件系统允许,就可以直接在代码里使用字符串。如果不允许,使用"Unicode 转义",例如'\u0108' ,char常量使用’单引号’,String常量使用”双引号”。Unicode 转义序列可以用于程序的其他地方(例如字段名),而不是char或String常量。

java编程语言对于char和String常量也支持其他转义:\b (退格键), \t (选项卡), \n (换行符), \f (换页符), \r (回车), \" (双引号), \' (单引号),  \\ (反斜杠).

null常量,用于任何引用类型的值。null可以复制给任何变量,处理原生类型。使用null值,可以判断对象是否存在。所以,null常常用来在程序中标记,指示一些对象不可用。

最后,有一种特别的常量,成为类常量。格式是类型名字加上”.class”;例如,String.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后缀的前面

在数值期望为字符串的位置

下面的例子证明了数值常量中合法和非法的下划线位置:

// Invalid: cannot put underscores// adjacent to a decimal pointfloat pi1 = 3_.1415F;// Invalid: cannot put underscores// adjacent to a decimal pointfloat pi2 = 3._1415F;// Invalid: cannot put underscores// prior to an L suffixlong socialSecurityNumber1 = 999_99_9999_L;// This is an identifier, not// a numeric literalint x1 = _52;// OK (decimal literal)int x2 = 5_2;// Invalid: cannot put underscores// At the end of a literalint x3 = 52_;// OK (decimal literal)int x4 = 5_______2;// Invalid: cannot put underscores// in the 0x radix prefixint x5 = 0_x52;// Invalid: cannot put underscores// at the beginning of a numberint x6 = 0x_52;// OK (hexadecimal literal)int x7 = 0x5_2;// Invalid: cannot put underscores// at the end of a numberint x8 = 0x52_;

 

转载于:https://www.cnblogs.com/ggjucheng/archive/2012/12/08/2809371.html

你可能感兴趣的文章
shell编程系列9--文本处理三剑客之sed概述及常见用法总结
查看>>
java加载机制整理
查看>>
npm 一些常用的命令
查看>>
插入超链接
查看>>
【总结】第一章Java入门,第二章数据类型和运算符总结
查看>>
LeetCode 34 Search for a Range
查看>>
C与C++,面向过程与面向对象
查看>>
第37件事 极简设计的3个方面
查看>>
Docker安装(yum方式 centos7)
查看>>
运算符
查看>>
json对象
查看>>
一个简单的转换字母大小写的方法
查看>>
Web开发者用什么编辑器?
查看>>
Vue的路由
查看>>
[题解]UVA10986 Sending email
查看>>
[Python]小白入门时遇到的各种问题
查看>>
爬 豆瓣 喜马拉雅
查看>>
信息安全的重要性
查看>>
Python datetime模块
查看>>
event 事件div块的拖拽
查看>>