【HeadFirst系列之HeadFirstJava】第3天之从零开始理解Java中的主数据类型和引用

news/2025/2/23 12:45:46

从零开始理解Java中的主数据类型和引用

《Head First Java》是一本非常适合初学者的Java入门书籍,它以轻松幽默的方式讲解了Java的核心概念。在第三章节中,书中详细介绍了Java的主数据类型(Primitive Types)引用(References)。这两个概念是Java编程的基础,理解它们对于掌握Java语言至关重要。今天,我们就通过书中的内容,结合代码示例,来深入理解主数据类型和引用。

在这里插入图片描述


主数据类型:Java的“基本元素”

Java是一种强类型语言,这意味着每个变量都必须声明其类型。Java的主数据类型是Java中最基本的数据类型,它们直接存储数据值,而不是存储对象的引用。

Java的8种主数据类型如下:

类型大小(字节)取值范围默认值
byte1-128 到 1270
short2-32,768 到 32,7670
int4-2^31 到 2^31-10
long8-2^63 到 2^63-10L
float4约 ±3.40282347E+38F0.0f
double8约 ±1.79769313486231570E+3080.0d
char20 到 65,535(Unicode字符)‘\u0000’
boolean1truefalsefalse

代码示例:主数据类型的使用

java">public class PrimitiveTypesExample {
    public static void main(String[] args) {
        byte b = 100;           // 8位整数
        short s = 10000;        // 16位整数
        int i = 100000;         // 32位整数
        long l = 10000000000L;  // 64位整数
        float f = 3.14f;        // 32位浮点数
        double d = 3.141592653589793; // 64位浮点数
        char c = 'A';           // 16位Unicode字符
        boolean bool = true;     // 布尔值

        System.out.println("byte: " + b);
        System.out.println("short: " + s);
        System.out.println("int: " + i);
        System.out.println("long: " + l);
        System.out.println("float: " + f);
        System.out.println("double: " + d);
        System.out.println("char: " + c);
        System.out.println("boolean: " + bool);
    }
}

输出结果:

byte: 100
short: 10000
int: 100000
long: 10000000000
float: 3.14
double: 3.141592653589793
char: A
boolean: true

引用:Java中的“遥控器”

在Java中,除了主数据类型,还有一种数据类型叫做引用类型。引用类型变量存储的是对象的引用(可以理解为对象的地址),而不是对象本身。

引用类型的特点

  1. 引用类型变量存储的是对象的地址:例如,String s = new String("Hello"); 中,s 存储的是 String 对象在内存中的地址。
  2. 引用类型变量的默认值是 null:如果引用类型变量没有初始化,它的值是 null,表示它不指向任何对象。
  3. 引用类型变量可以指向任何对象:例如,Object obj = new String("Hello"); 中,obj 可以指向任何 Object 类型的对象。

代码示例:引用类型的使用

java">public class ReferenceTypesExample {
    public static void main(String[] args) {
        String str1 = new String("Hello");
        String str2 = str1;  // str2 和 str1 指向同一个对象

        System.out.println("str1: " + str1);
        System.out.println("str2: " + str2);

        str1 = new String("World");  // str1 指向一个新的对象
        System.out.println("str1: " + str1);
        System.out.println("str2: " + str2);  // str2 仍然指向原来的对象
    }
}

输出结果:

str1: Hello
str2: Hello
str1: World
str2: Hello

主数据类型 vs 引用类型

特性主数据类型引用类型
存储内容直接存储数据值存储对象的引用(地址)
默认值有默认值(如 int 默认是 0默认值是 null
内存分配在栈上分配在堆上分配
性能访问速度快访问速度相对较慢
用途存储简单的数据值存储复杂对象

常见问题与注意事项

  1. 主数据类型的自动装箱与拆箱
    Java提供了自动装箱(Autoboxing)和拆箱(Unboxing)机制,使得主数据类型和对应的包装类(如 intInteger)可以自动转换。

    java">Integer i = 100;  // 自动装箱
    int j = i;        // 自动拆箱
    
  2. 引用类型的空指针异常
    如果引用类型变量没有初始化(即值为 null),尝试访问其方法或属性会导致 NullPointerException

    java">String s = null;
    System.out.println(s.length());  // 抛出 NullPointerException
    
  3. 主数据类型的范围溢出
    主数据类型的取值范围是有限的,如果超出范围会导致溢出。

    java">int i = Integer.MAX_VALUE + 1;  // 溢出,i 的值变为 Integer.MIN_VALUE
    

总结

通过《Head First Java》第三章节的内容,我们深入理解了Java中的主数据类型和引用类型。主数据类型是Java中最基本的数据类型,直接存储数据值;而引用类型存储的是对象的引用,可以指向复杂的对象。

理解主数据类型和引用类型的区别,对于掌握Java编程至关重要。希望这篇文章能帮助你更好地理解这两个概念,并在实际开发中灵活运用它们!


互动话题:你在学习Java时遇到过哪些关于数据类型的问题?欢迎在评论区分享你的经验和心得!


http://www.niftyadmin.cn/n/5863410.html

相关文章

SpringBoot中实现限流和熔断功能

我们将使用Java的ScheduledExecutorService来实现一个简单的令牌桶算法(Token Bucket Algorithm),并结合一个自定义的服务类来处理第三方API调用。 1. 创建限流器 首先,创建一个简单的限流器类: import java.util.concurrent.*;public class SimpleRateLimiter {

计算机专业知识【数据库完整性约束:数据质量的坚固防线】

在数据库管理的领域中,数据的准确性、一致性和可靠性是至关重要的。为了保障这些特性,我们引入了各种完整性约束机制。接下来,就为大家详细介绍用户定义的完整性约束、实体完整性约束、参照完整性约束和关键字完整性约束,让数据库…

利用爬虫获取淘宝商品描述:实战案例指南

在电商领域,商品描述是消费者了解产品细节、做出购买决策的重要依据。精准获取淘宝商品描述不仅能帮助商家优化产品信息,还能为市场研究和数据分析提供丰富的数据资源。本文将详细介绍如何利用爬虫技术精准获取淘宝商品描述,并分享关键技术和…

2012年IMO几何预选题第6题

设有非等腰的 △ A B C \triangle ABC △ABC, O O O 和 I I I 分别为外心和内心. 在边 A C AC AC, A B AB AB 上分别存在两点 E E E 和 F F F, 使得 C D C E A B CDCEAB CDCEAB, B F B D A C BFBDAC BFBDAC. 设 ( B D F ) (BDF) (BDF) 和 ( C D E ) (CDE) (CDE)…

sklearn中的决策树

sklearn 中的决策树 关键概念、核心问题 节点 根节点:没有进边,有出边。包含最初的,针对特征的提问。中间节点:既有进边也有出边,进边只有一条,出边可以有很多条。都是针对特征的提问。叶子节点&#xff1…

mysql之规则优化器RBO

文章目录 MySQL 基于规则的优化 (RBO):RBO 的核心思想:模式匹配与规则应用RBO 的主要优化规则查询重写 (Query Rewrite) / 查询转换 (Query Transformation)子查询优化 (Subquery Optimization) - RBO 的重中之重非相关子查询 (Non-Correlated Subquery)…

代码随想录-训练营-day35

309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode) 这个题比起我们的买卖股票二来说多了一个冷冻期的说法,也就是我们卖出股票的第二天无法买入股票。 这样对我们而言,dp数组的含义,或者说dp数组中的状态显然就不能是…

Next.js 学习-1

Next.js学习 引用:https://www.nextjs.cn/learn/basics/create-nextjs-app 先试试水吧,正好dify用的这个构建的前端项目。 使用 如果您尚未安装 Node.js,请 从此处安装。要求 Node.js 10.13 或更高版本。 好吧得用新的了,记得…