当前位置: 首页 > ai >正文

LeetCode第二题知识点3 ----引用类型

1.. 首先:什么是“引用类型”?

在 Java 中,类型分为两大类:

类型例子特点
基本类型(Primitive Types)intbooleandoublecharbyteshortlongfloat直接存“值”,不是对象
引用类型(Reference Types)所有类、接口、数组、枚举存的是“指向对象的地址”

🔑 关键:所有你自己用 class 定义的东西,都是引用类型!

2. ListNode 是怎么被定义的?

public class ListNode {int val;ListNode next;ListNode(int x) { val = x; }
}
  • 你用了 class ListNode 来定义它。
  • 只要是 class 定义的,Java 就认为它是一个类(class)
  • 所有类的实例(对象)都是引用类型

👉 所以:ListNode 是引用类型,因为它是一个 类(class)

3. 为什么“定义了一个类”就叫引用类型?

我们来对比:

❌ 基本类型(Java 内置,不是用 class 定义的)

int a = 10;
  • int 是 Java 语言内置的基本类型
  • 它不是用 class 定义的,是语言“原生支持”的。
  • a 直接存储数字 10

引用类型(用 class 定义的)

ListNode node = new ListNode(5);
  • ListNode 是你用 class 定义的一个
  • node 不直接存数据,它存的是这个对象在堆中的地址(比如 0x123)。
  • 真正的数据(val=5next=null)在堆上。

4. 举个更直观的例子

String s = "hello";
  • String 是引用类型(它是 class String 定义的)
  • s 存的是地址,不是 "hello" 这个字符串本身
int x = 100;
  • int 是基本类型
  • x 直接存 100

👉 所以:只要是 classinterfaceenum[](数组)定义的,都是引用类型。

5. 回到你的疑问:“他只是定义了一个方法而已啊”

你说“只是定义了一个方法”,这其实是一个常见的误解。

我们再看 ListNode 的定义:

public class ListNode {      // ← 这是定义一个“类”,不是方法!int val;                  // ← 成员变量ListNode next;            // ← 成员变量(类型是 ListNode)ListNode(int x) {         // ← 构造方法(特殊方法)val = x;}
}
  • class ListNode:这是在定义一个类,不是定义方法。
  • ListNode(int x):这是一个构造方法,用来创建对象。
  • int val; 和 ListNode next;:这是两个字段(成员变量)

所以:

ListNode 是一个类,它的实例是对象,因此它是引用类型

6. 如何快速判断一个类型是不是引用类型?

方法一:看它是不是这 8 个基本类型之一

byte, short, int, long,
float, double,
boolean,
char

👉 ListNode 不在其中 → 是引用类型

方法二:看它是不是用 class / interface / [] 定义的

  • class Person {} → 引用类型
  • interface Runnable → 引用类型
  • int[] arr → 引用类型(数组)
  • String s → 引用类型(class String

👉 ListNodeclass → 引用类型

方法三:能不能用 new 创建?

  • int x = 10; ✅ 合法,但不能写 new int(10)(虽然数组可以)
  • ListNode node = new ListNode(0); ✅ 合法

能用 new 创建的,一定是引用类型(对象)

 7. 为什么 ListNode next; 中的 next 类型是 ListNode 就能说明它是引用?

因为:

在 Java 中,只有引用类型才能作为类的字段类型

你不能写:

// ❌ 错误!不能用基本类型名字当类名
int int = 5;  // 语法错误

但你可以写:

ListNode next;  // ✅ 合法,因为 ListNode 是一个类(引用类型)

所以编译器看到 ListNode next; 就知道:

  • ListNode 是一个类
  • next 是一个引用,指向 ListNode 类型的对象

✅ 总结:一句话回答你的问题

ListNode 是引用类型,因为它是一个用 class 定义的类,而不是 Java 的 8 个基本类型之一。

  • class ListNode → 定义了一个类
  • 所有类的实例都是对象
  • 所有对象的引用都是引用类型

所以 ListNode next; 中的 next 是一个引用,指向一个 ListNode 对象,默认值是 null

http://www.xdnf.cn/news/18996.html

相关文章:

  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day15
  • OpenCV的轮廓检测
  • 神经语言学与脑科学启发的NLP深层分析:从统计拟合到机制理解的范式转变
  • 基于Spring Boot的短信平台平滑切换设计方案
  • 基于Matlab实现模糊综合评价程序
  • 使用 Java 替换和修改 PDF 文本的方法
  • c++标准模板库
  • 赋能你的应用:英超实时数据接入终极指南(API vs. WebSocket)
  • mongoDB学习(docker)
  • Bert学习笔记
  • HDFS 基本原理与操作流程
  • Python 【深度解析】线程与进程:操作系统中多任务的核心机制
  • 嵌入式第四十一天(数据库)
  • undefined和null
  • 【大模型14】Fine-tuning与大模型优化1
  • HunyuanVideo-Foley视频音效生成模型介绍与部署
  • 【完整源码+数据集+部署教程】胚胎发育阶段检测系统源码和数据集:改进yolo11-SCConv
  • Git 8 ,git 分支开发( 切换分支开发,并设置远程仓库默认分支 )
  • 机器视觉opencv教程(二):二值化、自适应二值化
  • 云计算学习笔记——逻辑卷管理、进程管理、用户提权RAID篇
  • 利用亮数据MCP服务器构建个性化学习情报官智能体
  • 第三章 Vue3 + Three.js 实战:用 OrbitControls 实现相机交互与 3D 立方体展示
  • 《应用密码学》——基础知识及协议结构模块(笔记)
  • 第2.1节:AI大模型之GPT系列(GPT-3、GPT-4、GPT-5)
  • 箭头函数和普通函数的区别
  • websocket的应用
  • 【物联网】什么是 DHT11(数字温湿度传感器)?
  • 为什么不能创建泛型数组?
  • 【计算机408计算机网络】第三章:自底向上五层模型之数据链路层
  • 轮廓周长,面积,外界圆,外界矩形近似轮廓和模板匹配和argparse模块实现代码参数的动态配置