Java官方教程(二-2)基本数据类型 Primitive Data Types(2020.12.15)

前言

本文是橙子出于兴趣爱好对Java官方教程的尝试翻译,几乎每日更新,感兴趣的朋友可以关注一下橙子;翻译过程中尽可能多的对一些关键词保留了英文原文,如果你想看最纯正的英文原版教材却又看不懂,可以试着来看一下橙子的翻译版啊,欢迎大家留言讨论,冲鸭!
更多相关文章点击阅读
Java官方教程目录2020最新版

语言基础

基本数据类型 Primitive Data Types

Java语言是静态类型(statically-typed)的,这意味着所有variables必须先被declared,然后才能被使用。正如你已经看到的,这涉及到variable的类型(type)和名称(name):

int gear = 1;

这样做会告诉你的程序(program),存在一个名为“gear”的field,该field保存数值数据,并且其初始值为1。variable的data type决定了它可能包含的值,以及可能对其执行的操作。除了int之外,Java语言还支持其它7种基本数据类型。primitive type由语言预先定义,并保留关键字命名。primitive value(基本值)不与其它primitive value共享state。Java语言支持的8种primitive data type如下:

  • byte
    Byte数据类型是一个8位(8 bit)的带符号二进制补码整数。最小值为-128,最大值为127(含)。Byte数据类型在大型数组中节省内存非常有用,节省内存在实际开发中很重要。Byte也可以用来代替int,因为byte的范围有助于阐述你的代码。variable范围有限的事实可以作为文档的一种形式。与byte一样,在大数组中,可以用short来节省内存。
  • short
    Short数据类型是一个16位带符号二进制补码整数。最小值为-32767,最大值为32767(含)。
  • int
    默认情况下,int数据类型是带符号的32位的二进制补码整数,最小值-231,最大值231-1。在Java SE 8和更高版本中,可以用int数据类型表示无符号32位整数,其最小值为0,最大值为232-1。使用Integer class可以将int数据类型用作无符号整数。更多信息参见The Number Classer章节。静态方法(如compareUnsigned,divideUnsigned等)已经添加到Integer class,以支持无符号整数的算术运算。
  • long
    Long数据类型是64位二进制补码整数。带符号的long最小值为-263,最大值为263-1。在Java SE 8及更高版本中,可以用long数据类型表示无符号的64位的long,其最小值为0,最大值为264-1。当你需要一个比int提供的范围更大的值时,可以选用long。Long类型还包含compareUnsigned,diviUnsigned等方法,以支持无符号long的算术运算。
  • float
    Float数据类型是单精度的32位IEEE754浮点数。其值范围超出了本文的讨论范围,详见 the Floating-Point Types, Formats, and Values 章节。与byte和short一样,如果需要在大型浮点数数组中节省内存,使用float(而不是double)。永远不要将这种数据类型用于精确值,例如货币。为此,你需要使用java.math.BigDecimal类。Numbers and Strings覆盖BigDecimal以及Java平台提供的其它有用的class。
  • double
    Double数据类型是双精度64位IEEE754浮点数。其值范围超出了本文的讨论范围,详见 the Floating-Point Types, Formats, and Values 章节。对于10进制值,double通常是默认类型。如上所述,double数据类型永远不能用于精确值,例如货币。
  • boolean
    Boolean数据类型只有2个可能的值:true and false。可以在跟踪真假条件的时候作为简单标志。Boolean数据类型代表一小部分信息,但是其size不是精确定义的。
  • char
    Char数据类型是单个16位Unicode字符。它的最小值位‘\ u0000’(或0),最大值位‘\ uffff’(或65535(含))。

除了上面列出的8种数据类型外,Java语言还通过java.lang.Stirng class为character strings(字符串)提供特殊支持。用双引号括住的character string会自动创建一个新的String object。例如,String s = "this is a string";String objects是不可变的,这意味着,一旦被创建,它们的值就无法改变。从技术上说,String class不是一个primitive data type,但考虑到语言对它的特殊支持,你可能会倾向于这样认为。关于String class,详见Simple Data Objects

默认值 Default Values

Declare field时不一定总是要分配默认值。编译器会为已declared但未liitialized的fields设置一个合理的默认值。通常,默认值为0或null,具体取决于数据类型。但是,通常认为依赖默认值是不好的编程习惯。下表总结了上述数据类型的默认值:
在这里插入图片描述
Local variables稍有不同,编译器永远不会为一个未初始化的(uninitialized)local variable赋默认值。如果无法在declared局部变量时初始化,请确保使用它之前为其分配一个值。访问uninitiated局部变量将导致编译时(compile-time)错误。Primitive types是语言中内置的特殊类型,它们不是从class种创建的object。

字面量 Literals

你可能已经注意到,initializing基本类型(primitive type)的变量时没有使用new关键字。A literal是一个表示固定值的源代码,literal在代码中直接表示无需计算。如下所示,可以将literal赋值给primitive type的variable。

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

整型字面量 Integer Literals

如果一个integer literal以L or l结尾,则其为long类型;否则为int类型。建议使用大写字母L,因为小写字母l很难与数字1区分。

Integral types(整数类型)byte,short,int,long,都可以从int literals中创建。可以从long literals中创建超出int范围的long类型的值。Integer literals可以通过以下数字系统表示:

  • Decimal
    以10为基数,其数字由0-9组成;这是你每天使用的数字系统。
  • Hexadecimal
    基数为16,其数字由数字0-9和字母A-F组成。
  • Binary
    基数为2,其数字由数字0-1组成(你可以在Java SE 7及更高版本中创建二进制literal)。

对于通用编程,10进制可能是你唯一要使用的数字系统。但是,如果你需要使用其它数字系统,下面的示例展示正确的语法。前缀0x表示16进制,前缀0b表示2进制。

// The number 26, in decimal
int decVal = 26;
//  The number 26, in hexadecimal
int hexVal = 0x1a;
// The number 26, in binary
int binVal = 0b11010;

浮点型字面量 Floating-Point Literals

如果a floating-point literal 以字母F or f结尾,则其类型为float;否则为double类型,并可以选择以字母D or d结尾。浮点型(float and double)也可以用E or e(科学计数法),F or f(32-bit float literal),D or d(64-bit float literal,这是默认,通常被省略)来表示;

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

字符和字符串字面量 Character and String Literals

A char and Stirng类型的literal可以包含任何Unicode(UTF-16)字符,如果你的编辑器或文件系统允许,则可以在代码中直接使用此类character。如果没有的话,可以使用Unicode转义,例如,’\u0108’ (capital C with circumflex), or “S\u00ED Se\u00F1or” 。始终对char literals使用单引号,对String literals使用双引号。Unicode转移序列可以用在程序中的其它地方(例如,在field名称中),而不是仅仅在char and String literals中。

Java语言还为char and String literals支持一些特殊的转义序列:\b (backspace), \t (tab), \n (line feed), \f (form feed), \r (carriage return), " (double quote), ’ (single quote), and \ (backslash).

还有一个特殊的null literal可以用作任何引用类型的值。可以将null分配给除了primitive type的variable之外的任何variable。除了能测试null value的存在之外,几乎没有什么好办法。因为,在程序中经常使用null最为标记,表示某些object不可用。

最后,还有一种特殊的literal,叫做class literal。通过类名称加".class”来表示。例如,String.class。这认为(Class类型的)object代表它本身。

在数字literal中使用下划线 Using Underscore Characters in Numeric Literals

在Java SE 7及更高版本中,在numerical literal中的digits之间的任何地方都可以使用下划线,这个功能可以帮你分隔numeric literals中的digits,以此来提高代码的可读性。

例如,如果你的代码中包含很多digits,可以使用下划线分成3组,类似于用逗号,空格等标点符号。如下所示:

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;

你只能在数字(digits)之间添加下划线,不能在以下地方添加下划线:

  • 数字的开头或结尾
  • 浮点数的小数点附近
  • 在F or L后缀之前
  • 在需要一串数字的位置

下面示例展示了正确和错误的用法

// Invalid: cannot put underscores
// adjacent to a decimal point
float pi1 = 3_.1415F;
// Invalid: cannot put underscores 
// adjacent to a decimal point
float pi2 = 3._1415F;
// Invalid: cannot put underscores 
// prior to an L suffix
long socialSecurityNumber1 = 999_99_9999_L;

// OK (decimal literal)
int x1 = 5_2;
// Invalid: cannot put underscores
// At the end of a literal
int x2 = 52_;
// OK (decimal literal)
int x3 = 5_______2;

// Invalid: cannot put underscores
// in the 0x radix prefix
int x4 = 0_x52;
// Invalid: cannot put underscores
// at the beginning of a number
int x5 = 0x_52;
// OK (hexadecimal literal)
int x6 = 0x5_2; 
// Invalid: cannot put underscores
// at the end of a number
int x7 = 0x52_;

年轻人不要不讲武德,进来了点个赞再走啊!

猜你喜欢

转载自blog.csdn.net/weixin_42509923/article/details/111227767