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

《华为项目管理之道》第1章笔记

performance indicator,KPI)纳入个人绩效承诺书,贯彻结果导向的理念,以向员工。客户需求是华为发展的原动力,为客户服务是华为存在的唯一理由。目经理‘用兵’,依靠市场机制‘调兵’”,打破了人员在功能部门的板结,实现了听得。为管理者选拔的必要条件,项目经理成为人人向往的岗位。《华为项目管理之道》,是新出的华为官方的项目管理书,整个书不错。伴随着项目型组织的建立,华为逐步形成了完备的项目管理流程和制度,从而将业务运。为此,通过改革,重新明确了项目经理承担的经营责任,并开始以项。

jackyrongvip的专栏 2127

用Python玩转LQR控制:3行核心代码实现倒立摆稳定控制(附Jupyter Notebook)

本文通过Python实战演示了如何使用LQR算法实现倒立摆的稳定控制。文章以直观方式解释LQR原理,提供从系统建模、核心代码求解到参数调优的完整流程,并附有可运行的Jupyter Notebook代码。重点介绍了如何利用SciPy库快速计算最优反馈增益,并通过仿真验证控制效果,为运动控制实践提供了即学即用的指南。

weixin_29311017的博客 83

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

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

weixin_29858113的博客 152

Apple Pay不能添加卡,不一定是卡的问题,有可能是设备的问题

Apple Pay不能添加卡,不一定是卡的问题,有可能是设备的问题。

wyxtx的博客 3435

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

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

0verWatch的博客 590

单视图几何Vanish Point(消失点/灭点)计算方法——Robert_T_Collins(罗伯特·柯林斯)算法

单视图几何Vanish Point(消失点/灭点)计算方法——Robert_T_Collins(罗伯特·柯林斯)算法

beyond951的博客 7333

斗罗大陆叙事体系与战斗系统设计解析

在文学创作与游戏设计中,世界观构建和战斗系统设计是两大核心技术要素。世界观作为故事发生的背景框架,需要融合东西方文化元素并建立量化标准,如《斗罗大陆》中武魂觉醒与魂环等级体系。战斗系统则需突破简单数值对抗,发展出武魂特性、魂技组合与环境互动的三维体系,其中魂导器技术的引入展现了科技与魔法的创新融合。这些设计原理在RPG游戏开发、网络文学创作等领域具有广泛应用价值,特别是对需要长期运营的IP作品,完善的系统设定能有效支撑剧情延展与商业化开发。本文以现象级作品为例,剖析其武魂拟态理论和魂师工业化构思如何成就经典

weixin_29291069的博客 249

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

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

weixin_30907935的博客 411

从3D相机数据到三维模型:Halcon实战深度图、亮度图与点云转换全流程

本文详细解析了如何利用Halcon将3D相机采集的深度图、亮度图转换为三维点云模型的完整流程。通过实战案例分享,涵盖数据格式处理、点云生成方法(SDK接口与纯Halcon实现)、三维模型可视化优化等关键技术,帮助工程师解决工业检测中的实际难题,提升三维重建精度与效率。

weixin_42525005的博客 394

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

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

weixin_34034670的博客 440

SST专题(2-5)MMC-SST 输入级的环流抑制

本文研究了模块化多电平换流器(MMC)的数学模型及其环流抑制控制方法。首先建立了MMC等效电路模型,推导了桥臂电流方程和虚拟电动势表达式,提出通过控制桥臂电压修正量来调节内部电流而不影响外部特性。针对MMC特有的二倍频负序环流问题,设计了基于负序旋转坐标变换的环流抑制控制器(CCSC),将时变环流转换为直流量进行控制。通过比例-积分调节和电压前馈补偿,生成内部不平衡压降参考值,最终形成包含功率控制和环流抑制的整体控制结构。仿真结果表明该方法能有效抑制内部环流,同时保持系统稳定运行。

嵌入式老牛的博客 536

华为OD机试双机位C卷-部门人力分配 (Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【部门人力分配】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 部门人力分配。

qq_45776114的博客 1872

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

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

weixin_30920597的博客 385

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

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

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

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

weixin_30621711的博客 680

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

weixin_33770878的博客 297

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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、付费专栏及课程。

余额充值