【Java编程进阶】Java数据类型详解

简介: 程序运行时产生的临时数据我们存储在被称为变量的内存单元里,而变量的创建,就是在内存中分配一块内存空间。为什么要定义不同的数据类型呢?当我们预先定义好数据类型后,内存管理系统在给变量分配内存空间时,就可以根据变量的数据类型为变量分配合适的存储空间,分配的空间只能用来储存该类型数据。总的来说,给变量定义数据类型可以让内存空间得到充分的利用。

在这里插入图片描述

个人主页:橙子

推荐学习专栏:Java 编程进阶之路【从入门到精通】


1. Java数据类型

在这里插入图片描述
前面说到,程序运行时产生的临时数据我们存储在被称为变量的内存单元里,而变量的创建,就是在内存中分配一块内存空间。

为什么要定义不同的数据类型呢?当我们预先定义好数据类型后,内存管理系统在给变量分配内存空间时,就可以根据变量的数据类型为变量分配合适的存储空间,分配的空间只能用来储存该类型数据。总的来说,给变量定义数据类型可以让内存空间得到充分的利用。

Java中数据类型一共分为两大类,一类是基本数据类型,另一类叫做引用数据类型。其中基本数据类型一共 8 种。

在这里插入图片描述

2. 基本数据类型

在基本数据类型中,每一个类型都定义了占用存储空间的字节数,我们可以根据现实中的意义,数据所占用内存的大小等选择合适的数据类型,达到充分利用内存空间的目的。

Java中定义了 8 个基本数据类型,分别是:

  • [x] byte 字节型
  • [x] short 短整型
  • [x] int 整型
  • [x] long 长整形
  • [x] float 单精度浮点型
  • [x] double 双精度浮点型
  • [x] boolean 布尔型
  • [x] char 字符型

其中前四种是数值型变量,现在对这 8 中数据类型做一个详解:

byte:

  • byte 数据类型是8位、有符号的,以二进制补码表示的整数;
  • 最小值是 -128(-2^7);
  • 最大值是 127(2^7-1);
  • 默认值是 0;

short:

  • short 数据类型是 16 位、有符号的以二进制补码表示的整数
  • 最小值是 -32768(-2^15);
  • 最大值是 32767(2^15 - 1);
  • 默认值是 0;

int:

  • int 数据类型是32位、有符号的以二进制补码表示的整数;
  • 最小值是 -2,147,483,648(-2^31);
  • 最大值是 2,147,483,647(2^31 - 1);
  • 默认值是 0 ;

long:

  • long 数据类型是 64 位、有符号的以二进制补码表示的整数;
  • 最小值是 -9,223,372,036,854,775,808(-2^63);
  • 最大值是 9,223,372,036,854,775,807(2^63 -1);
  • 默认值是 0L;

float:

  • float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
  • float 在储存大型浮点数组的时候可节省内存空间;
  • 默认值是 0.0f;
  • 浮点数不能用来表示精确的值,如货币;

double:

  • double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;
  • 浮点数的默认类型为 double 类型;
  • double类型同样不能表示精确的值,如货币;
  • 默认值是 0.0d;

boolean:

  • boolean数据类型表示一位的信息;
  • 只有两个取值:true 和 false;
  • 这种类型只作为一种标志来记录 true/false 情况;
  • 默认值是 false;

char:

  • char 类型是一个单一的 16 位 Unicode 字符;
  • 最小值是 \u0000(十进制等效值为 0);
  • 最大值是 \uffff(即为 65535);
  • char 数据类型可以储存任何字符;

在学习基本数据类型时,不需要刻意的记背,在后面的练习中,由于数据类型的概念会一直用到,所以会慢慢熟练的掌握,现在要学习的就是了解每个数据类型,以及表示的数据范围,思考不同数据类型的应用场景。

数据类型的最大最小值以常量的形式定义在对应的包装类中,例如整形 int 的包装类:java.lang.Integer

public class Test {
    public static void main(String[] args) {
        System.out.println("整型 占用的二进制位:"+ Integer.SIZE);
        System.out.println("最大值:"+Integer.MAX_VALUE);
        System.out.println("最小值:"+Integer.MIN_VALUE);
    }
}

运行结果:

整型 占用的二进制位:32
最大值:2147483647
最小值:-2147483648

每个基本数据类型都预先定义了一个默认值,上面的介绍中已经给出。

3. 引用数据类型

引用数据类型的变量非常类似与C/C++中的指针,引用类型指向一个对象,这时指向对象的这个变量就是引用变量。引用类型的变量的默认值都是 NULL。

Java是一门面向对象的编程语言,后面我们要用到的类,接口,数组都是引用数据类型。

Student stu = new Student();

如上,在创建一个 Student 对象的时候,就是定义了一个名为 stu 的对象变量指向这个 Student 的对象。

4. 类型转换

4.1 自动类型转换

整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。

转换时,必须满足转换前的数据类型的位数要低于转换后的数据类型(byte —> short —> char—> int —> long—> float —> double ),例如: short 数据类型的位数为16位,就可以自动转换位数为32的 int 类型。如下:

public class Test{
    public static void main(String[] args){
        char c1='a';//定义一个char类型
        int i1 = c1;//char自动类型转换为int
        System.out.println("char自动类型转换为int后的值等于"+i1);
    }
}

运行结果:

char 自动类型转换为 int 后的值等于97

4.2 强制类型转换

当我们要进行从高级转换到低级时,就要进行强制类型转换。转换的条件是转换的数据类型必须是兼容的。如下:

public class Test{
    public static void main(String[] args){
        int i = 123;
        byte b = (byte)i;//强制类型转换为byte
        System.out.println("int强制类型转换为byte后的值等于"+b);
    }
}

运行结果:

int强制类型转换为byte后的值等于123

数据类型转换应该注意这些问题:

  1. 不能对 boolean 类型进行类型转换。
  2. 不能把对象类型转换成不相关类的对象。
  3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
  4. 转换过程中可能导致溢出或损失精度。

Java编程基础教程系列

【Java编程进阶】标识符和关键字

【Java编程进阶】常量变量及作用域

【Java编程进阶】运算符与表达式

在这里插入图片描述

欢迎订阅学习Java编程进阶之路专栏,专栏文章持续更新!

目录
相关文章
|
3天前
|
Java 调度 开发者
Java 并发编程的探索与实践
【5月更文挑战第3天】在当今多核处理器普及的时代,并发编程已经成为提高程序性能的重要手段。本文将深入探讨 Java 并发编程的基本概念、原理及其在实际项目中的应用,帮助读者更好地理解和掌握 Java 并发编程技巧。
|
4天前
|
XML 监控 安全
18:面向切面编程-Java Spring
18:面向切面编程-Java Spring
22 5
|
4天前
|
并行计算 安全 Java
Java 并发编程的探索之旅
【5月更文挑战第2天】 在多线程的世界里,程序的行为变得错综复杂。本文将带您走进 Java 并发编程的核心概念,通过深入分析并发工具的使用和原理,帮助您构建高效、安全且响应迅速的应用程序。我们将探讨线程的基本知识,同步机制,以及高级并发工具如 Executors、Futures 和 Streams。通过理论与实践相结合的方式,为开发者提供一份清晰、实用的并发编程指南。
11 2
|
5天前
|
存储 安全 Java
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第1天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将详细分析线程安全问题的根源,以及如何通过合理的设计和编码实践来避免常见的并发问题。同时,我们还将探讨如何在保证线程安全的前提下,提高程序的并发性能,包括使用高效的同步机制、减少锁的竞争以及利用现代硬件的并行能力等技术手段。
|
6天前
|
安全 Java 程序员
Java并发编程:理解并应用ReentrantLock
【4月更文挑战第30天】 在多线程的世界中,高效且安全地管理共享资源是至关重要的。本文深入探讨了Java中的一种强大同步工具——ReentrantLock。我们将从其设计原理出发,通过实例演示其在解决并发问题中的实际应用,以及如何比传统的synchronized关键字提供更灵活的锁定机制。文章还将讨论在使用ReentrantLock时可能遇到的一些挑战和最佳实践,帮助开发者避免常见陷阱,提高程序性能和稳定性。
|
6天前
|
缓存 Java 调度
Java并发编程:深入理解线程池
【4月更文挑战第30天】 在Java并发编程中,线程池是一种重要的工具,它可以帮助我们有效地管理线程,提高系统性能。本文将深入探讨Java线程池的工作原理,如何使用它,以及如何根据实际需求选择合适的线程池策略。
|
6天前
|
Java
Java并发编程:深入理解线程池
【4月更文挑战第30天】 本文将深入探讨Java中的线程池,解析其原理、使用场景以及如何合理地利用线程池提高程序性能。我们将从线程池的基本概念出发,介绍其内部工作机制,然后通过实例演示如何创建和使用线程池。最后,我们将讨论线程池的优缺点以及在实际应用中需要注意的问题。
|
6天前
|
Java 大数据 数据库连接
java编程的优点
【4月更文挑战第30天】java编程的优点
12 0
|
6天前
|
存储 Java 程序员
Java中的基本数据类型有哪些?
【4月更文挑战第30天】Java中的基本数据类型有哪些?
11 1
|
6天前
|
存储 安全 Java
【亮剑】Java并发编程中的四个关键字:ThreadLocal、Volatile、Synchronized和Atomic
【4月更文挑战第30天】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制。`ThreadLocal`为每个线程提供独立变量副本;`Volatile`确保变量可见性,但不保证原子性;`Synchronized`实现同步锁,保证单线程执行;`Atomic`类利用CAS实现无锁并发控制。理解其原理有助于编写高效线程安全代码。根据业务场景选择合适机制至关重要。