1.4Java语言的类型(Type)

Java是一种强类型静态语言,分为 原始类型(primitive type) 和 引用类型(reference type)。

不可变类型(Immutable):原始类型或引用类型的数据被初始化赋值后是不可变的,如果被修改需在新内存地址保存新值,旧值所在的旧内存地址随后会被垃圾回收。

可变类型(Mutable):原始类型或引用类型的数据被初始化赋值后是可变的,如果被修改只需在原有内存地址将新值取代旧值。

原始类型 包含 整数类型(不可变)、IEEE754浮点类型(不可变)、布尔类型(不可变)、Unicode 字符类型(不可变)。

引用类型 包含 类类型(可变)、接口类型(可变)、BigInteger类类型(不可变)、BigDecimal类类型(不可变)、Unicode 字符串类型(不可变)、枚举类型(不可变)、记录类型(不可变)、数组类型(可变)。java.lang.Object是所有其它类的超类。

原始类型的变量包含该原始类型的值。类类型的变量可以保存null引用或对象的引用。接口类型的变量可以保存null引用或实现该接口的任何类的实例的引用。数组类型的变量可以保存null引用或对数组的引用。类类型 Object的变量可以保存null引用或对任何对象的引用,无论是类实例还是数组。

1.整数(integral)类型

整数类型可以用十进制、十六进制(前缀0X0x)、八进制(前缀0,容易混淆) 或 二进制(0B0b) 来表示。

long后缀 L 是首选,因为字母 l 通常很难与数字 1 区分开来。

为了让数字易于阅读,数值很长会加上下划线(_),但Java编译器会去除这些下划线,例如:1_000_000_000_000

类型存储需求范围默认值打包(wrapping)类型
byte1字节-128(-27)~ 127(27-1)0java.lang.Byte
short2字节-32768(215) ~ 32767(215-1)0java.lang.Short
int4字节-2,147,483,648(-231) ~ 2,147,483,647(231 -1)0java.lang.Integer
long8字节-9,223,372,036,854,775,808L(-263) ~ 9,223,372,036,854,775,807L(263 -1)0Ljava.lang.Long

2.IEEE754浮点(floating-point)类型

浮点类型遵循IEEE 754二进制浮点算术标准

后缀为Fffloat(单精度)类型。

没有后缀或后缀为Dddouble(双精度)类型。

类型存储需求范围默认值打包(wrapping)类型
float(单精度)4字节大约 ±3.402 823 47E+38F (有效位数6~7位)0.0fjava.lang.Float
double(双精度)8字节大约 ±1.797 693 134 862 315 70E+308 (有效位数15位)0.0djava.lang.Double

四个特殊的浮点数值:

  • 正负零
  • 正无穷大
  • 负无穷大
  • NaN(Not-a-Number,不是一个数字)

3.布尔(boolean)类型

类型描述默认值打包(wrapping)类型
booleantruefalse用来判断真假falsejava.lang.Boolean

4.Unicode 字符(char)类型

类型存储需求范围默认值打包(wrapping)类型
char2字节'\u0000' 到 '\uffff',即从 0 到 65535‘\u0000’java.lang.Character

5.类(class)类型

类型默认值API
classnulljava.lang.Class<T>

6.接口(interface)类型

类型默认值
interfacenull

7.BigInteger类类型

类型范围API
BigInteger任意范围整数java.math.BigInteger

8.BigDecimal类类型

类型范围API
BigDecimal任意范围精确小数java.math.BigDecimal

9.Unicode 字符串(String)类型

类型是否可变类型默认值API
String不可变类型nulljava.lang.String
StringBuffer可变类型(多线程,效率低)nulljava.lang.StringBuffer
StringBuilder可变类型(单线程,效率高)nulljava.lang.StringBuilder

10.枚举(enum)类型

类型默认值API
enumnulljava.lang.Enum<E>

11.记录(record)类型

类型默认值API
recordnulljava.lang.Record

12.数组(array)类型

类型默认值API
arraynulljava.util.Arrays

13.空(null)类型

类型描述
nullnull表示空引用

14.void返回类型

类型API
voidjava.lang.Void

15.编译时类型和运行时类型

//编译时类型为 object,运行时类型为 string。
object anotherMessage = "This is another string of characters";

16.类型转换

隐式转换

隐式转换始终会成功且不会导致数据丢失,因此无需使用任何特殊语法。

//从范围较小的整数值类型到范围较大的整数值类型的隐式转换
int num = 2147483647;
long bigNum = num;
//从派生类引用类型到直接或间接的超类或接口引用类型的隐式转换
Derived d = new Derived();

Base b = d;

显式转换(强制转换)

显式转换,又称强制转换,可能会导致数据丢失,因此必须使用强制转换表达式

//从精度较高或范围较大的数值值类型到精度较低或范围较小的数值值类型的显式转换
double x = 1234.7;
int a;
a = (int)x;
System.out.println(a);
// Output: 1234
//从超类引用类型到派生类引用类型的显式转换

//隐式转换到基类是安全的
Giraffe g = new Giraffe();
Animal a = g;
//显式转换到派生类型,如果右侧的a实际不是长颈鹿类型,将在运行时抛出异常
Giraffe g2 = (Giraffe)a;

17.打包(wrapping)和解包(unwrapping)

打包

打包(又称boxing,装箱)转换将原始类型的表达式视为相应引用类型的表达式。

从类型byte到类型Byte

从类型short到类型Short

从类型int到类型Integer

从类型long到类型Long

从类型float到类型Float

从类型double到类型Double

从类型char到类型Character

从类型boolean到类型Boolean

从null类型到null类型

解包

解包(又称unboxing,拆箱)转换将引用类型的表达式视为相应原始类型的表达式。

从类型Byte到类型byte

从类型Short到类型short

从类型Integer到类型int

从类型Long到类型long

从类型Float到类型float

从类型Double到类型double

从类型Character到类型char

从类型Boolean到类型boolean

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/java/javalang/2473.html

(2)
上一篇 2020年11月3日 21:25
下一篇 2020年11月5日 22:13

相关推荐

  • 2.11Java语言的可访问性(Accessibility)

    同一个类中 同一个包中 子类中 全局范围内 public 有 有 有 有 protected 有 有 有 —————— default 有 有 —————— —————— private 有 —————— —————— —————— 注意:default是指不包含任何可访问性修饰符。

    Java语言教程 2021年1月11日
    07880
  • 2.6Java引用类型之枚举(Enum)

    1.枚举声明 枚举类也是一种类,只不过是它是一种特殊的类,所以可以定义静态变量、静态方法、实例变量、实例方法、private构造器。 枚举类内的常量应该全部大写,系统会自动添加public static final修饰符,且必须在枚举类的第一行显式列出。 2.枚举继承 枚举类默认继承了java.lang.Enum类,由…

    Java语言教程 2021年1月6日
    06420
  • 2.5Java引用类型之字符串(String)

    1.字符(char) 字符 由用单引号引起来的1个字符或1个转义序列组成。 2.字符串(String) 2.1字符串声明 字符串 由用双引号引起来的零个或多个字符组成。 2.2连接字符串 Java语言允许使用 + 号连接两个字符串。 2.3格式化字符串(Format String) 每个产生格式化输出的方法都需要一个格…

    Java语言教程 2021年1月5日
    09030

发表回复

登录后才能评论