Java 数据类型

简介: Java 数据类型知识点数据类型分类Java 中的数据类型有两类:值类型(又叫内置数据类型,基本数据类型)引用类型值类型和引用类型的区别从概念方面来说基本类型:变量名指向具体的数值。

Java 数据类型

知识点

数据类型.png

数据类型分类

Java 中的数据类型有两类:

  • 值类型(又叫内置数据类型,基本数据类型)
  • 引用类型

值类型和引用类型的区别

  • 从概念方面来说
    • 基本类型:变量名指向具体的数值。
    • 引用类型:变量名指向存数据对象的内存地址。
  • 从内存构建方面来说
    • 基本类型:变量在声明之后,Java 就会立刻分配给他内存空间。
    • 引用类型:它以特殊的方式(类似 C 指针)向对象实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地址。
  • 从使用方面来说
    • 基本类型:使用时需要赋具体值,判断时使用 == 号。
    • 引用类型:使用时可以赋 null,判断时使用 equals 方法。

值类型

​Java 的每种基本类型所占存储空间的大小是固定的。它们的大小不像其他大多数语言那样随机器硬件架构的变化而变化。这种不变性是Java程序相对其他大多数语言而言,更容易移植的原因之一。

所有数值类型都有正负号,所以不要去寻找无符号的数值类型。

与绝大多数编程语言类似,Java 也支持数值型、字符型、布尔型数据。

Java 语言提供了 8 种基本类型,大致分为 4

  • 整数型
    • byte:8 位,最大存储数据量是 255,存放的数据范围是 -128 ~ 127 之间。
    • short:16 位,最大数据存储量是 65536,数据范围是 -32768 ~ 32767 之间。
    • int:32 位,最大数据存储容量是 2 的 32 次方减 1,数据范围是负的 2 的 31 次方到正的 2 的 31 次方减 1。
    • long:64 位,最大数据存储容量是 2的 64 次方减 1,数据范围为负的 2 的 63 次方到正的 2 的 63 次方减 1。
  • 浮点型
    • float:32 位,数据范围在 3.4e-45 ~ 1.4e38,直接赋值时必须在数字后加上 f 或 F。
    • double:64 位,数据范围在 4.9e-324 ~ 1.8e308,赋值时可以加 d 或 D 也可以不加。
  • 字符型
    • char:16 位,存储Unicode码,用单引号赋值。
  • 布尔型
    • boolean:只有 true 和 false 两个取值。

对于数值类型的基本类型的取值范围,我们无需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中了。

示例:

public class DataTypeScopeDemo {

    public static void main(String[] args) {
        // byte
        System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
        System.out.println("包装类:java.lang.Byte");
        System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
        System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
        System.out.println();
    }
};

输出:

基本类型:byte 二进制位数:8
包装类:java.lang.Byte
最小值:Byte.MIN_VALUE=-128
最大值:Byte.MAX_VALUE=127

数据转换

自动转换

一般情况下,定义了某数据类型的变量,就不能再随意转换。但是JAVA允许用户对基本类型做有限度的类型转换。

如果符合以下条件,则JAVA将会自动做类型转换:

  • 由“小”数据转换为“大”数据

    显而易见的是,“小”数据类型的数值表示范围小于“大”数据类型的数值表示范围,即精度小于“大”数据类型。

    所以,如果“大”数据向“小”数据转换,会丢失数据精度。比如:long 转为 int,则超出 int 表示范围的数据将会丢失,导致结果的不确定性。

    反之,“小”数据向“大”数据转换,则不会存在数据丢失情况。由于这个原因,这种类型转换也称为扩大转换

    这些类型由“小”到“大”分别为:(byte,short,char) < int < long < float < double。

    这里我们所说的“大”与“小”,并不是指占用字节的多少,而是指表示值的范围的大小。

  • 转换前后的数据类型要兼容

    由于 boolean 类型只能存放 true 或 false,这与整数或字符是不兼容的,因此不可以做类型转换。

  • 整型类型和浮点型进行计算后,结果会转为浮点类型

示例:

long x = 30;
float y = 14.3f;
System.out.println("x/y = " + x/y);

输出:

x/y = 1.9607843

可见 long 虽然精度大于 float 类型,但是结果为浮点数类型。

强制转换

在不符合自动转换条件时或者根据用户的需要,可以对数据类型做强制的转换。

转换方式为:在数值的前面用一个括号 () 把要强制转换的类型标注出来。

示例:

float f = 25.5f;
int x = (int)f;
System.out.println("x = " + x);

装箱和拆箱

包装类

Java 中基本类型的包装类如下:

  • Byte <-> byte
  • Short <-> short
  • Integer <-> int
  • Long <-> long
  • Float <-> float
  • Double <-> double
  • Character <-> char
  • Boolean <-> boolean

装箱

装箱是将值类型转换为引用类型。

例:

Integer i1 = new Integer(10); // 非自动装箱
Integer i2 = 10; // 自动装箱
System.out.println("i1 = " + i1);
System.out.println("i2 = " + i2);

拆箱

拆箱是将引用类型转换为值类型。

例:

int i1 = new Integer(10); // 自动拆箱
Integer tmp = new Integer(20);
int i2 = tmp.intValue(); // 非自动拆箱
System.out.println("i1 = " + i1);
System.out.println("i2 = " + i2);

使用装箱的场景

一种最普通的场景是:调用一个含类型为 Object 参数的方法,该 Object 可支持任意类型(因为 Object 是所有类的父类),以便通用。当你需要将一个值类型(如 Integer)传入时,需要装箱。

另一种用法是,一个非泛型的容器,同样是为了保证通用,而将元素类型定义为 Object。于是,要将值类型数据加入容器时,需要装箱。

自动装箱、自动拆箱

基本数据(Primitive)型的自动装箱(boxing)拆箱(unboxing)自 JDK 5 开始提供的功能。

JDK 5 之前的形式:

Integer i1 = new Integer(10); // 非自动装箱

JDK 5 之后:

Integer i2 = 10; // 自动装箱

Java 对于自动装箱和拆箱的设计,依赖于一种叫做享元模式的设计模式(有兴趣的朋友可以去了解一下源码,这里不对设计模式展开详述)。

目录
相关文章
|
6月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
90 13
|
2月前
|
存储 人工智能 JavaScript
Java中的数据类型转换
本文介绍了 Java 中常见的数据类型转换方法,涵盖字符串与整型、长整型、浮点型、布尔型及日期类型的相互转换,并讲解了可能出现的异常和处理方式。
111 0
|
6月前
|
Java C语言 C++
课时9:Java数据类型划分(数据类型划分)
课时9介绍了Java的数据类型划分及其操作。Java数据类型分为基本数据类型和引用数据类型。基本数据类型包括八种:数值型(整形、浮点型)、字符型和布尔型;引用数据类型有数组、类和接口。重点讲解了每种数据类型的默认值、适用场景及选择原则,如整数用int,小数用double,日期时间用Long等。掌握这些内容对编程至关重要。
117 4
课时9:Java数据类型划分(数据类型划分)
|
6月前
|
Java
课时12:Java数据类型划分(字符型)
课时12介绍了Java中的字符型数据(char),包括字符的定义、与int类型的转换及应用。通过范例展示了如何观察字符、编码转换、大小写字母互转、保存中文字符,以及Java中字符处理的灵活性。字符型使用单引号声明,可与int互相转换,支持Unicode编码,能表示任何文字,包括中文。虽然实际开发中直接操作字符型的情况不多,但理解其特性有助于更好地编程。
106 17
|
6月前
|
存储 传感器 缓存
java变量与数据类型:整型、浮点型与字符类型
### Java数据类型全景表简介 本文详细介绍了Java的基本数据类型和引用数据类型,涵盖每种类型的存储空间、默认值、取值范围及使用场景。特别强调了`byte`、`int`、`long`、`float`、`double`等基本类型在不同应用场景中的选择与优化,如文件流处理、金融计算等。引用数据类型部分则解析了`String`、数组、类对象、接口和枚举的内存分配机制。
172 15
|
6月前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、&quot;+&quot;操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
144 9
|
6月前
|
Java
课时13:Java数据类型划分(布尔型)
观察布尔型的操作。布尔是一位数学家的名字,这个布尔发明了两个单词:True、False(一个表示真一个表示假)。一般布尔类型都只表示逻辑的计算结果。
150 9
|
5月前
|
存储 缓存 Java
理解Java引用数据类型:它们都是对象引用
本文深入探讨了Java中引用数据类型的本质及其相关特性。引用变量存储的是对象的内存地址而非对象本身,类似房子的地址而非房子本身。文章通过实例解析了引用赋值、比较(`==`与`equals()`的区别)以及包装类缓存机制等核心概念。此外,还介绍了Java引用类型的家族,包括类、接口、数组和枚举。理解这些内容有助于开发者避免常见错误,提升对Java内存模型的掌握,为高效编程奠定基础。
236 0
|
6月前
|
Java
课时11:Java数据类型划分(浮点类型)
课时11介绍了Java中的浮点数据类型。主要内容包括:1. 定义小数,默认使用Double类型;2. 定义Float变量,需在数值后加&quot;F&quot;或&quot;f&quot;进行强制转换;3. 观察不同类型计算结果,如Int型除法会丢失精度,需至少包含一个Double或Float类型以确保准确性。总结指出,在复杂计算中推荐使用Double类型以避免精度损失。
132 5
|
6月前
|
Java
课时10:Java数据类型划分(整型类型)
本文主要围绕Java中整型数据展开,详细讲解整型变量、常量的概念,整型数据运算规则,包括数据溢出问题及解决方法,数据类型转换(自动转换与强制转换)的原理和注意事项,同时介绍了整型数据默认值的相关知识,以及byte数据类型与int数据类型的关系和使用场景,帮助读者全面掌握Java整型数据的相关内容。
165 4

热门文章

最新文章