Java的null和值传递,理解透彻至少能打牢Java基础的1/10

Java数据类型与运算符详解:从基础到实战技巧 数据类型和运算符是编程语言的核心基础,Java作为强类型语言尤其重视类型系统的严谨性。基本数据类型包括byte、short、int等8种,存储在栈内存中效率高;引用类型则通过内存地址访问堆中的对象。类型转换涉及自动转换和强制转换,需要注意精度损失和溢出问题。运算符系统包含算术、关系、逻辑、位运算等多种类型,其中位运算在底层开发中尤为重要。理解这些基础概念能有效避免NullPointerException、类型转换异常等常见问题,并能在数值计算、字符串处理等场景中优化性能。Java社区推荐优先使用int和do 阅读详情

Java的null和值传递,理解透彻至少能打牢Java基础的1/10


public class A {
	/***********第一种情况 ,实参不为null的情况下,猜猜b.j=???****************/
	int i = 1;
    B b = new B();
	A(){
		setB(b);
		System.out.println(b.j);
	}
	
	public static void main(String[] args) {
		A a = new A();
	}
	
	public void setB(B b) {
		b=new B();
		b.j=10;
	}

}

class B{
	int j=1;
}

总结:理解 null 和值传递的本质,需明确实参与形参的独立性,值传递仅复制值,引用类型传递的是地址值,修改形参指向的新对象不影响实参原指向的对象(除非形参直接修改实参对象的属性) 

第一种情况 ,实参不为null的情况下,猜猜b.j=???

Java 的值传递本质是 “将实参的值复制给形参” 

main方法开始执行:

先简单分析一下内存(超简易版)

1.执行A a = new A();

此时内存

 此时假设b = new B()的b的地址值是 0x456;

2.执行构造函数里的setB(B b)时

把实参b的地址值 0x456 拷贝给方法参数里的形参b

此时内存 

开始执行

setB(B b) 里面的b=new B();此时b指向了一个新地址 假设是0x789,此时内存

下一步 b.j=10;

内存图 

3.setB(B b) 执行完毕,为这个方法分配的栈空间消失,此时内存 

堆空间的那块j=10,没有引用指向这块内存,后续会被垃圾回收器收走,

执行 

System.out.println(b.j); 

最终结果 为1

********************************************************************************************************************


public class A {
	/***********第二种情况 ,实参为null的情况下,猜猜b.j=???****************/
	B b ;
	A(){
		setB(b);
		System.out.println(b.j);
	}
	
	public static void main(String[] args) {
		A a = new A();
	}
	
	public void setB(B b) {
		b=new B();
		b.j=10;
	}

}

class B{
	int j=1;
}
  1. 第一步:创建 A 实例

    • A 对象在堆中创建,成员变量 b 初始化为 null(默认值),此时栈中 a 变量指向这个 A 对象。
    • 实参:A 对象的成员变量 b(值为 null,相当于一张没写地址的纸条)。
  1. 第二步:调用 setB(b)

    • 进入 setB 方法时,Java 会将实参 b 的值(null)拷贝给形参 b。
    • 形参:setB 方法内的局部变量 b(值也是 null,相当于用实参纸条复印了一张新纸条,内容都是 null)。
    • 此时只有两张纸条:实参 b(属于 A 对象)和形参 b(方法内的局部变量),“拷贝” 是赋值动作,不是第三张纸条。
  1. 第三步:执行 b = new B();

    • 形参 b 这张纸条的内容被修改为 0x789(指向新 B 对象),但实参 b 依然是 null(纸条内容没动)。
    • 此时还是只有两张纸条,只是形参纸条的内容变了。

为什么不存在 “第三个变量”?

  • “拷贝” 是动作,不是变量:Java 的值传递本质是 “将实参的值复制给形参”,这个过程中没有产生新的变量,只是形参变量被赋予了实参的值。
  • 类比理解:
    • 实参 b 是 “原始纸条”,形参 b 是 “复印的纸条”。
    • “拷贝” 相当于 “用复印机把原始纸条的内容印到复印纸条上”,这个动作完成后,依然只有两张纸条(原始和复印),没有第三张。
    • ************************************************************************************

关键误区:“拷贝”≠“新变量”

很多人误以为 “值传递” 会产生一个 “拷贝变量”,但实际上:

  • 实参和形参是两个独立的变量,它们的关系是 “形参被实参的值初始化”。
  • 就像你有一个苹果(实参),把它的样子画到纸上(形参),纸上的苹果是独立的,不是第三个苹果。

Java基础深度解析:从内存模型到并发编程的实战指南 面向对象编程是现代软件开发的基石,其核心思想在于通过抽象、封装、继承和多态来构建复杂系统。在Java中,这一思想通过类、接口和对象机制得以实现,其底层依赖于JVM内存模型来管理对象生命周期和线程交互。理解这些原理对于编写高性能、可维护的代码至关重要,尤其是在高并发场景下,需要掌握synchronized锁升级、volatile可见性等并发控制技术。在实际开发中,集合框架如HashMap的扩容机制、ArrayList的遍历删除陷阱等高频问题,直接关系到应用性能与稳定性。本文聚焦Java核心基础,通过剖析内存管 阅读详情

相关推荐

C语言从零到精通:指针、内存与系统编程实战指南

编程语言是人与计算机沟通的桥梁,而C语言作为一门贴近硬件的系统级语言,其核心价值在于让开发者深入理解计算机底层工作原理。从变量、数据类型到函数、控制流,C语言通过直接操作内存和地址,揭示了程序在机器中运行的实质。掌握指针这一核心概念,不仅能理解数据在内存中的组织与访问方式,更是学习动态内存管理、数据结构构建乃至操作系统内核的基础。这种对内存布局和生命周期的精细控制能力,是开发高性能系统软件、嵌入式固件以及理解现代高级语言运行时机制的关键。本文围绕C语言学习中的核心难点——指针与内存管理,结合数组、结构体等复

weixin_34326558的博客 354

Java参数传递本质:值传递与引用值的JVM真相

在Java中,'参数传递'这一基础概念常被简化为‘值传递’或‘引用传递’的二元判断,但其真实机制需回归JVM运行时模型理解:所有参数——无论是int、String还是ArrayList——均以‘值’的形式传递,而该‘值’对引用类型而言,就是指向堆中对象的引用值(reference value)。这一机制由栈帧局部变量表、操作数栈及invokestatic等字节码指令共同实现,核心是内存地址的复制而非对象本身。它决定了方法内能否修改外部变量的指向(不能),以及能否修改其所指对象的状态(取决于对象可变性)。理解

weixin_33744141的博客 448

Android Binder与AIDL实战:从核心原理到跨进程通信避坑指南

在Android开发中,跨进程通信(IPC)是实现模块化、插件化及与系统服务交互的关键技术。其核心原理在于通过高效、安全的进程间数据交换机制,解决传统Linux IPC在性能、安全性和易用性上的瓶颈。Binder作为Android独有的IPC框架,通过一次拷贝、C/S架构及完善的身份校验,提供了面向对象的高性能通信基础。AIDL(Android接口定义语言)则在此基础上,为开发者自动生成模板代码,简化了Binder通信的复杂度。在工程实践中,理解Binder驱动、ServiceManager的角色以及AID

weixin_30536513的博客 402

Java基础学习全攻略:从核心语法到实战项目避坑指南

Java作为一门面向对象的编程语言,其核心在于通过类与对象、封装、继承、多态等机制构建健壮的软件系统。理解Java编译执行机制(JVM)和内存模型是掌握其原理的基础,这直接关系到代码的性能与线程安全。在工程实践中,集合框架(如HashMap、ArrayList)和异常处理是处理数据与管控流程的关键工具,而面向对象思想则是设计可维护、可扩展代码的基石。对于初学者和转行者而言,构建一个清晰的学习路径至关重要,应遵循从环境搭建、语法核心、核心API到进阶特性的顺序,并最终通过实战项目(如学生信息管理系统)串联知识

weixin_30387423的博客 364

一文读懂 AI 模型训练流程

AI模型训练流程可分为五个关键步骤:首先进行数据准备,包括收集、清洗、标注和增强数据;其次选择合适的模型架构并搭建神经网络;然后通过前向传播、损失计算和反向传播进行模型训练;接着用验证集评估模型性能,并调整超参数;最后在测试集上检验模型泛化能力。整个过程需要精心设计每个环节,才能获得性能优异的AI模型。

牧晨加油站 1480

SpringBoot项目整合Knife4j接口文档

写满接口信息的文档,每条接口包括:请求参数,响应参数,接口地址,接口名称,请求类型,请求格式,备注。

诨号无敌鸭的博客 1017

lucene处理java对象_java语言,使用lucene过程中碰到的一个参数传递的问题

首先,我知道java参数传递的规则。1、基本数据类型值传递。2、引用数据类型地址传递,其中由于String池的问题,使得String类型是个特例。那么请看如下代码,请帮忙解释为什么不对?pu...首先,我知道java参数传递的规则。1、基本数据类型值传递。2、引用数据类型地址传递,其中由于String池的问题,使得String类型是个特例。那么请看如下代码,请帮忙解释为什么不对?public cl...

weixin_29858113的博客 152

WSL2 Ubuntu复现FoundationPose项目(docker)

复现一个基于深度学习的物体姿态估计框架FoundationPose项目,使用docker,WSL2

woaidawangwang的博客 2000

关于python传参引发的一些思考

人总有不会的,遇到一些问题深究下去必定有所收获 这个问题是在我写python爬虫项目的时候的疑问,可能是我太菜了(以前没学透彻),也可能是上学期学Java的时候按值传递的特点给搞混了,因为当时在用多线程的生产者消费者问题处理资源队列,参考别人代码的时候突然蒙了一下,但后来查了查资料发现原来是下面的原因,值得记录一下坑点,顺便当复习,对语言有个更深入的理解也挺好的 前置的一些知识 在pyth...

0verWatch的博客 590

miniDP与DP管脚定义差异详解及设计避坑指南

本文详细解析了Mini DisplayPort与标准DisplayPort接口在管脚定义上的核心差异,通过对比表格直观展示了两者20针脚的不同排列方式,特别是高速差分信号线的分布。文章结合真实设计案例,为硬件工程师提供了从原理图设计、PCB布局到信号完整性考量及故障排查的完整避坑指南,强调绝不能将两者视为简单的物理缩小版。

weixin_29248653的博客 362

NBU计算机大二下期末

计算机网络 任课老师:JG (放了一学期的他自己的视频和上了一学期网课没什么区别,甚至不如上网课。。。) 考试题型 填空题10*1 判断题10*1 选择题30*1 简答和计算题30(4题) 讨论题20 强烈建议不要再这门课上花太多时间复习,不然有复习了个寂寞的感觉。。。计网是一页开卷的,一页开卷纸不用写太多,第一他不会考太详细;第二反正最后都要被收走。 填空题、判断题基本看懂了英文就能做的差不多;选择题去网上找点英文题多刷一下问题不大;简答题把书上每章根据他上课的内容在开卷纸上抄下就好,今年是解释check

weixin_45816954的博客 710

零基础高效学习C语言:从核心语法到实战项目的系统路径

编程语言是计算机科学的基础,它定义了人与机器沟通的规则。C语言作为一门贴近硬件、效率至上的编译型语言,其核心原理在于通过简洁的语法和直接的内存操作,实现对计算机资源的精细控制。掌握C语言不仅能培养严谨的计算思维和内存思维,更是深入理解操作系统、数据结构及嵌入式系统等底层技术的基石,具有极高的技术价值。在工程实践中,C语言广泛应用于系统软件、嵌入式开发和高性能计算等场景。本文聚焦于C语言学习路径,通过构建系统性的知识图谱和循序渐进的实战项目,帮助初学者高效建立编程思维,并特别针对指针与内存管理这一核心难点进行

weixin_30907935的博客 411

时序数据库避坑指南:TDengine与IoTDB在车联网场景的7个关键对比

本文对比了时序数据库TDengine与IoTDB在车联网场景下的7个关键差异,包括数据模型设计、边缘-云端协同能力、车规级函数库、存储压缩算法等。通过真实案例和性能测试,帮助企业在新能源汽车大数据处理中选择合适的时序数据库,优化存储成本和实时告警性能。

rust6ferris的博客 452

C语言30天实战速通:从零基础到项目开发与就业接单

C语言作为理解计算机底层运作的核心语言,其价值在于直接操作内存和硬件,是学习操作系统、编译原理等高级概念的基础。通过掌握指针、内存管理等核心原理,开发者能够深入理解程序在计算机中的执行机制,从而编写出高性能、高效率的系统软件。这种底层控制能力在嵌入式开发、系统编程、高性能服务器等场景中具有不可替代的技术价值。本文基于【30天学习路线】和【实战项目】规划,提供一套从环境配置、核心语法到独立开发小项目的系统化学习方案,帮助初学者快速跨越学习门槛,建立扎实的编程基础并指向实际应用。

weixin_34034670的博客 440

癌症免疫治疗预测神器TIDE:从原理到实战(避坑指南)

本文详细解析了癌症免疫治疗预测工具TIDE的核心原理及实战应用。TIDE算法通过模拟肿瘤免疫逃逸的两种核心机制(T细胞功能障碍和排除),为临床决策提供精准预测。文章涵盖数据准备、标准化流程、网页工具操作指南及结果解读,帮助科研人员和临床医生避开常见误区,优化免疫治疗策略。

weixin_29309475的博客 197

借助ChatGPT完成课题申报书中框架思路写作指南

通过这篇文章的学习,我们可以让ChatGPT先为用户匹配研究理论、研究方法、研究思路、研究内容等,为申请人提供一些参考,能够帮助对拟申报课题有一个初步的认识。当申请人找到了合适的理论、方法和问题后,再借助精细化提示词模型提问,那ChatGPT回答的启发性肯定会有质的提升,更具有使用价值。

智能AI让学术科研更容易 2468

SQL注入攻击原理与防范实战:告别WHERE 1=1拼接漏洞

SQL注入是一种常见的Web安全漏洞,攻击者通过在应用程序输入点插入恶意SQL代码,欺骗数据库执行非预期操作。其核心原理在于应用程序未对用户输入进行有效过滤,直接将输入拼接到SQL语句中执行,导致数据库逻辑被篡改。参数化查询(预编译语句)是防范SQL注入最有效的技术手段,它将SQL代码与数据分离,确保用户输入仅被视为数据而非可执行代码。在工程实践中,结合输入验证、最小权限原则等纵深防御策略,能显著提升系统安全性。本文以WHERE 1=1这一常见开发模式为切入点,深入剖析SQL注入的利用方式与防范体系,为开发

weixin_30920597的博客 385

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

算法修炼入门指南:从数据结构到基础算法的二十二层体系构建

数据结构与算法是计算机科学的核心基础,它们共同构成了高效解决复杂问题的理论框架。数据结构如数组、链表、栈、队列和哈希表,负责数据的组织与存储,而算法思想如递归、分治、排序和查找,则定义了处理数据的逻辑步骤。掌握这些基础能显著提升代码效率与系统性能,是进行系统设计、优化和通过技术面试的基石。在实际开发中,无论是构建高并发服务、实现快速检索,还是优化数据处理流程,都离不开扎实的算法内功。本文以“练气二十二层”为隐喻,系统梳理了从变量、流程控制到二叉树、堆等核心内容的渐进式学习路径,并融入递归、动态规划等高频技术

weixin_30621711的博客 680

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C语言变量本质:从内存视角理解指针、数组与内存管理

在计算机编程中,变量是存储数据的基本单元,其本质是内存中的一块特定区域,通过地址进行访问。理解变量的内存表示是掌握底层编程原理的关键,涉及内存地址、数据大小和存储值三个核心属性。这一原理在C语言中尤为重要,因为它直接关系到指针操作、数组访问和动态内存管理的技术实现。通过深入理解栈、堆和静态存储区的内存布局,开发者能够有效避免段错误、内存泄漏等常见问题,提升代码的健壮性和性能。本文聚焦于C语言变量的内存本质,结合指针运算和调试工具实践,帮助读者构建从内存视角理解编程的底层思维。

weixin_33770878的博客 298

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C/C++刷题环境搭建与STL实战:从零掌握算法底层实现

算法是计算机科学的核心基础,其本质是通过特定步骤高效解决计算问题。理解算法的时间与空间复杂度,关键在于掌握数据在内存中的组织与访问方式。C/C++语言因其贴近硬件、内存管理透明的特性,成为深入理解算法底层原理的理想工具。通过手动管理内存、操作指针,开发者能直观感知数据结构的扩容、拷贝开销,从而建立对算法性能的深刻认知。在工程实践中,标准模板库(STL)提供了vector、unordered_map等高效容器,配合sort、binary_search等泛型算法,能极大提升开发效率。本文以LeetCode算法训

weixin_30423977的博客 351

深入解析C/C++多级指针:从内存模型到动态二维数组实战

指针是C/C++编程中直接操作内存的核心机制,它通过存储变量地址实现了高效的数据共享与传递。其原理在于利用内存地址的间接访问,解引用操作符(*)用于获取或修改目标数据。这一技术价值在于避免了不必要的数据拷贝,显著提升了程序性能,尤其在系统编程和底层优化中至关重要。应用场景广泛,包括动态内存管理、函数间参数传递以及复杂数据结构(如链表、树)的实现。本文聚焦于多级指针这一高级主题,通过剖析**动态创建二维数组**和**在函数中修改指针本身**等典型应用,结合内存模型图解与常见错误排查,帮助开发者掌握其正确用法与

weixin_34082789的博客 378

C语言学习心路:从环境搭建到指针内存,掌握计算机底层思维

编程语言是人与计算机沟通的桥梁,而理解其底层原理是构建扎实技术根基的关键。从变量、数据类型到内存管理,这些核心概念揭示了程序在计算机中如何存储与运行。通过理解指针与内存地址的关系,开发者能深入掌控数据流与资源分配,这是编写高效、健壮代码的基础。这种底层思维不仅对系统编程、操作系统学习至关重要,也为理解高级语言特性和性能优化提供了坚实支撑。本文以C语言学习为例,结合环境配置、语法核心和项目实践,分享了如何通过理解指针、内存管理等底层机制,建立清晰的计算机思维模型,从而在技术学习中实现从“会用”到“懂原理”的跨

weixin_30947043的博客 350

JNI跨语言交互:Java long如何持有C++对象指针的原理与实践

在Java Native Interface(JNI)技术中,跨语言对象交互是一个核心概念。其基本原理是通过类型映射,将C++对象的内存地址(指针)转换为Java的long类型进行传递,实现Java与Native代码间的对象引用。这一机制涉及指针与整数的安全转换、JNI类型系统的桥梁作用,以及跨语言内存模型的协同。从技术价值看,它使得Java能够安全地操作C/C++层的高性能模块或系统资源,同时避免了直接暴露指针带来的内存风险。典型的应用场景包括Android系统底层开发、高性能计算库封装、游戏引擎绑定等。

weixin_30847865的博客 439

2024年自学C语言:从环境搭建到核心概念的系统指南

C语言作为计算机系统的基石,其核心价值在于提供对内存、硬件和底层运行机制的精细控制。理解其工作原理,如指针、内存管理和编译链接过程,是掌握系统级编程和高性能计算的关键。这种底层控制能力,使得C语言在操作系统内核、嵌入式系统、数据库和编译器开发等对性能与资源敏感的场景中不可替代。通过搭建现代开发环境(如VSCode与Clang/GCC工具链),并结合动态内存管理、数据结构实现等工程实践,学习者能够构建坚实的计算机系统认知,为深入物联网、自动驾驶等前沿领域奠定基础。

weixin_30239339的博客 870

C语言入门实战指南:从环境搭建到项目开发,掌握编程核心

编程语言是计算机科学的基础,而C语言作为一门通用、过程式的编程语言,以其接近硬件的特性和高效的执行效率,成为理解计算机系统原理的关键。从概念上讲,C语言提供了对内存和硬件的直接操作能力,这使得开发者能够深入理解数据在计算机中的存储与处理方式。其核心原理在于通过编译器将高级代码转换为高效的机器码,实现了对系统资源的精细控制。在技术价值层面,掌握C语言不仅是学习一种语法,更是构建扎实的计算机科学基础、培养严谨编程思维的必经之路。它广泛应用于操作系统开发、嵌入式系统、编译器构造以及高性能计算等场景,是许多底层软件

weixin_34218890的博客 331

C语言指针核心解析:从内存原理到高效编程实践

指针是计算机编程中实现内存直接访问的核心机制,它本质上是一个存储内存地址的变量。其工作原理是通过地址间接操作数据,这赋予了程序极高的灵活性与效率。在技术价值上,指针不仅是实现动态内存管理、构建复杂数据结构(如链表、树)的基础,也是理解函数回调、多态以及底层硬件交互的关键。在应用场景中,指针广泛应用于系统编程、嵌入式开发、高性能计算以及算法优化等领域。本文以C语言为例,深入探讨指针在动态内存管理和数据结构构建中的具体实践,帮助开发者掌握这一底层利刃,从而编写出更高效、可控的代码。

congsikuai0611的博客 324
上一篇: Java swing JTable 是什么
下一篇: Java 的 null 和引用的本质:通俗易懂版
wu_android
博客等级 码龄10年 94粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值