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

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.dtcms.com/a/357700.html

相关文章:

  • lxml库如何使用
  • DSP280049 CLA可访问资源
  • 【开题答辩全过程】以 非遗信息管理系统为例,包含答辩的问题和答案
  • 2025年企业管理与经济、文化发展国际会议(MECD 2025)
  • 拎包入住搭建 Browser Use Agent:基于PPIO Model API +Agent 沙箱的一体化构建
  • React-Native项目回忆
  • QML Chart组件之坐标轴共有属性
  • 基于Springboot + vue3实现的教育资源共享平台
  • Java流程控制03——顺序结构(本文为个人学习笔记,内容整理自哔哩哔哩UP主【遇见狂神说】的公开课程。 > 所有知识点归属原作者,仅作非商业用途分享)
  • PCIe 6.0 TLP路由机制:解密高效数据传输的核心架构
  • 贪心算法面试常见问题分类解析
  • 了解 JavaScript 虚拟机(VM)引擎
  • 【项目思维】编程思维学习路线(推荐)
  • Simulink过程数据存储为mat
  • PHP的header()函数分析
  • Web开发工具一套式部署Maven/Nvm/Mysql/Redis
  • 迅睿CMS标签工具箱v1.1版本已更新
  • C++ STL之封装红黑树实现map/set
  • linux系统学习(15.启动管理)
  • Anaconda安装与conda使用详细版
  • 杨校老师竞赛课堂之C++语言GESP一级笔记
  • JUC并发编程09 - 内存(01) - JMM/cache
  • HITTER——让双足人形打乒乓球(且可根据球的走向移动脚步):高层模型规划器做轨迹预测和击球规划,低层RL控制器完成击球
  • windows下安装redis
  • fcitx5-rime自动部署的实现方法
  • ​Windows8.1-KB2934018-x64.msu 怎么安装?Windows 8.1 64位补丁安装教程​(附安装包下载)
  • Linux按键驱动开发
  • 基于 Vue + Interact.js 实现可拖拽缩放柜子设计器
  • 忆联参与制定消费级SSD团体标准正式出版! 以“高可靠”引领行业提质增效与用户体验升级
  • 图扑 HT 农林牧数据可视化监控平台