Java中的值传递和引用传递

在  Java  应用程序中永远不会传递对象,而只传递对象引用。因此是按引用传递对象。但重要的是要区分参数是如何传递的,这才是该节选的意图。 Java  应用程序按引用传递对象这一事实并不意味着  Java  应用程序按引用传递参数。参数可以是对象引用,而  Java  应用程序是按值传递对象引用的。
Java  应用程序中的变量可以为以下两种类型之一:引用类型或基本类型。当作为参数传递给一个方法时,处理这两种类型的方式是相同的。两种类型都是按值传递的;没有一种按引用传递。
按 值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味 着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。
当传递给函数的参数不是引用时,传递的都是该值的一个副本(按值传递)。区别在于引用。在  C++  中当传递给函数的参数是引用时,您传递的就是这个引用,或者内存地址(按引用传递)。在  Java  应用程序中,当对象引用是传递给方法的一个参数时,您传递的是该引用的一个副本(按值传递),而不是引用本身。
Java  应用程序按值传递所有参数,这样就制作所有参数的副本,而不管它们的类型。
  1. class  Test
  2. {
  3.   public  static  void  main(String  args[])
  4.   {
  5.     int  val;
  6.     StringBuffer  sb1, sb2;
  7.  
  8.     val = 10;
  9.     sb1 = new  StringBuffer ("apples" );
  10.     sb2 = new  StringBuffer ("pears" );
  11.     System .out.println("val is "  + val);
  12.     System .out.println("sb1 is "  + sb1);
  13.     System .out.println("sb2 is "  + sb2);
  14.     System .out.println("" );
  15.  
  16.     System .out.println("calling modify" );
  17.     // 按值传递所有参数
  18.     modify(val, sb1, sb2);
  19.     System .out.println("returned from modify" );
  20.     System .out.println("" );
  21.  
  22.     System .out.println("val is "  + val);
  23.     System .out.println("sb1 is "  + sb1);
  24.     System .out.println("sb2 is "  + sb2);
  25.   }
  26.  
  27.   public  static  void  modify(int  a, StringBuffer  r1,
  28.                             StringBuffer  r2)
  29.   {
  30.       System .out.println("in modify..." );
  31.       a = 0;
  32.       r1 = null ;  //1
  33.       r2.append(" taste good" );
  34.       System .out.println("a is "  + a);
  35.       System .out.println("r1 is "  + r1);
  36.       System .out.println("r2 is "  + r2);
  37.   }
  38. }
  39.  
Java  应用程序的输出
  1.  
  2. val is 10
  3. sb1 is apples
  4. sb2 is pears
  5.  
  6. calling modify
  7. in modify...
  8. a is 0
  9. r1 is null
  10. r2 is pears taste good
  11. returned from modify
  12.  
  13. val is 10
  14. sb1 is apples
  15. sb2 is pears taste good
  16.  


这段代码声明了三个变量:一个整型变量和两个对象引用。设置了每个变量的初始值并将它们打印出来。然后将所有三个变量作为参数传递给  modify  方法。

modify 
方法更改了所有三个参数的值:  

将第一个参数(整数)设置为  0 。  
将第一个对象引用  r1  设置为  null 。  
保留第二个引用  r2  的值,但通过调用  append  方法更改它所引用的对象(这与前面的  C++  示例中对指针  p  的处理类似)。

当执行返回到  main  时,再次打印出这三个参数的值。正如预期的那样,整型的  val  没有改变。对象引用  sb1  也没有改变。如果  sb1  是按引用传递的,正如许多人声称的那样,它将为  null 。但是,因为  Java  编程语言按值传递所有参数,所以是将  sb1  的引用的一个副本传递给了  modify  方法。当  modify  方法在  //1  位置将  r1  设置为  null  时,它只是对  sb1  的引用的一个副本进行了该操作,而不是像  C++  中那样对原始值进行操作。

另外请注意,第二个对象引用  sb2  打印出的是在  modify  方法中设置的新字符串。即使  modify  中的变量  r2  只是引用  sb2  的一个副本,但它们指向同一个对象。因此,对复制的引用所调用的方法更改的是同一个对象。
铁路场景雷达点云目标识别与追踪系统 本文介绍了一种基于毫米波雷达的铁路货运车站安全监控系统。该系统采用分布式架构,通过多个毫米波雷达节点采集点云数据,经过坐标转换、多雷达融合等处理后,利用机器学习算法实现列车、行人等目标的实时识别与追踪。系统包含数据采集层、处理层、目标识别层、追踪层、预警决策层和可视化层,能够克服传统视频监控受环境影响大的缺点,实现全天候可靠监测。文中详细展示了雷达数据解析和点云预处理的代码实现,包括坐标转换、数据格式解析和体素网格滤波等关键技术。该系统可有效预警铁路场景下的碰撞风险,提升货运车站的安全管理水平。 阅读详情

相关推荐

海思Hi3061M MCU:为高速吹风筒市场注入智能动力

此外,海思还提供了丰富的软件开发工具和生态环境组件,帮助开发者快速实现复杂功能。高速吹风筒因其高效的风力和快速的干燥效果,近年来在市场上越来越受欢迎。然而,传统的高速吹风筒在性能、噪音和使用寿命等方面仍有改进的空间。凭借其高性能、低功耗、低噪声和易用的开发工具,为高速吹风筒市场带来了全新的解决方案。这不仅提高了用户的使用体验,还延长了电机的使用寿命。这不仅减少了电机的电磁噪声,还提高了电机的运行效率。还支持风机顺逆风启动适配多种电阻范围的电机,进一步提高了吹风筒的适用性和灵活性。

2401_83448585的博客 2016

java值传递&址传递

​ 在main函数的内存中,存储了一个student的地址,在st函数的内存中存储了一个新的student,当运行到st方法时,会将新new出来的student赋值给s,这个时候,s已经指向了student,所以修改的是student地址中的数据。(通俗点理解,main函数是你家,你作为student,你要去st函数家串门,但是在st函数家来了另一个人小七替你充当了student,这个时候st下达了一条指令,将student家的电脑换掉,所以这时候小七是代替你的把家里电脑换掉)第一个例子中输出结果是10。

qq_53344479的博客 3628

Android汽车服务篇(一) CarService

本文主要说明了CarService这一系统服务的启动流程,以及一些关键成员的创建和初始化流程.同时简单介绍了一下客户端是如何获取和使用CarService对象, 如上文介绍的, CarService对象只是获取各个Manager的媒介,它本身并不承担管理传感器.空调等具体的任务.如果要获取车辆的相关信息,如车速, 车内空调温度,诊断信息, 或对车辆进行相关的控制,如升高和降低空调温度,控制座椅和车窗, 调节音量等,就要通过具体的Manager中的API和对应的服务来实现了.

u012514113的专栏 8145

Java方法中参数的传递(值传递、地址传递)详解

基本数据类型作为形参时就好比你有张纸上有非常重要数据,而你的女儿非要在这张纸上画画,这时候机制的爸爸想到了复印。于是产生两全其美的结果,你的珍贵的数据没有被摧毁而你的也女儿心满意足的画上画。这意味着当你对一个String对象进行修改时,实际上是创建了一个新的String对象,而不是在原有对象上进行修改。小编近期在学习Java中方法的参数传递时难以理解,相信大家也和小编一样对什么是值传递和地址传递很困扰。,按地址传递意味着将引用数据类型变量的地址传递给方法,对地址进行任何修改都。同样这里值得注意到的是这个。

weixin_60625208的博客 4400

kettle信息发送钉钉

由于其他的作业比较多,想要在job中加入一个转化发送消息到钉钉,其他的配置说明直接获取系统的信息。这样也避免直接修改其他的转换和大量的工作量。 步骤: 1、新建一个转换 拉取获取系统信息、获取变量、JavaScript代码、获取access_token组件。 2、获取系统信息设置 拿到需要的信息,比如作业的读写更新删除行数,job的日志内容 这个日志内容同在作业执行页面下输出的日志,所以可以在执行作业时选择是详细日志、基本日志还是错误日志。 3、获取变量 获取变量主要是想要去拿到job的名称,文件名。按

Deng_7788的博客 1447

智能问数产品背后的Agent技术揭秘:从任务分解到工具调用的完整流程

本文深入解析智能问数产品背后的Agent技术,从任务分解到工具调用的完整流程。通过大模型驱动的语义理解和动态工具调度,Agent系统能高效处理复杂数据分析需求,显著提升响应速度和准确率。文章详细介绍了模块化架构、任务分解机制、动态工具调用及双通道记忆系统等核心技术,展示了大模型时代的新型数据分析范式。

weixin_30399821的博客 438

Java中值传递和地址传递

Java中值传递和地址传递 为了更好的理解Java中的值传递和地址传递,首先需明确Java中的数据类型有哪些: Java中的数据类型: 基本数据类型:八大基本数据类型包括:字节(byte)、短整形(short)、整形(int)、长整形(long)、单精度浮点型(float)、双精度浮点型(double)、单字符型(char)、布尔值(boolean); 引用数据类型:类、接口、数组; 值传递和地址传递概念: 值传递:传入变量的数值,函数不能改变变量的数值;即在函数中形参发生变化不影响实参; 地址传递:

ahtohlove的博客 3890

【理论&实战篇】大模型RAG技术详解(一)-基础篇

RAG的初衷是为了增强大模型的事实性、时效性,减少幻觉,引入专业知识优化生成回复,是一种结合了信息检索技术与语言生成模型的人工智能技术。通过,并将其作为提示(Prompt)输入给大模型(LLM),来。

qq_41375680的博客 374

JAVA基础:值传递和址传递

方法调用时,传递的实参是一个基本类型的数据形参改变,实参不变又称为地址传递,或引用传递方法调用时,传递的实参是一个引用类型的数据基本类型的数据,比较简单,可以直接存储在变量中引用类型的数据比较复杂,包含了一堆子数据,不能直接存储在变量中,存储在堆区,会为其分配一个内存地址我们在使用引用类型数据时,都是通过地址间接引用类型的数据所谓的地址传递,就是在方法调用时,传递的是引用类型的地址。形参(内容)改变,实参(内容)改变类似于值传递的址传递。

weixin_53755148的博客 1887

Vue3 - 详细实现调用浏览器摄像头拍照并生成图片预览,支持将抓拍的图像保存到用户本地或上传到服务器、调取前置摄像头和后置摄像头,开启摄像头并进行拍照,vue实现调用摄像头,电脑或手机调用摄像头拍照

vue3,nuxt3,摄像头,vue3网站打开摄像头拍照,vue3项目调用摄像头实现拍照功能,拍照后怎么保存,照相后上传到后端服务器,开启摄像头黑屏,如何默认后置摄像头,网页开启电脑摄像头并照相,前置拍照,vue3如何调用手机摄像头进行拍摄,拒绝权限后不再弹出了,微信公众号网页,摄像头报错,拍照左右镜像反了,浏览器不兼容怎么办,vue3调用电脑端摄像头实时拍照,解决调用摄像头权限无法弹出,打不开摄像头,Vue3如何调用手机的摄像头,调用本地摄像头实现拍照,浏览器不弹摄像头权限了,如何不使用https运行测试

🏆 前端领域优质创作者 8654

RK3399快速上手 | 01- 开发环境搭建(固件烧写、编译工具链安装、kernel编译)

一、编译工具链 编译工具链使用gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu。 下载地址: https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabihf/ wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabi

Mculover666的博客(嵌入式) 8835

Java 值传递与址(引用)传递

只是由于String和8种包装类型都是不可变类,所以每次操作都是新创一个对象并重新赋给引用;在函数调用的时候,如果形参是String或者8种包装类型,操作形参不会影响实参,操作形参相当于重新创建对象不会影响原实参。由于栈中存的是地址(该地址指向堆内存中存储位置,即引用),所以传递的是“堆中的地址”的拷贝。所以我们说成是“引用(址)传递”。由于栈中存的就是“实际值”(java基本类型的值存储在栈中,不在堆中),所以传递的是基本类型的“实际值”的拷贝。,不可变的意思是每次更换值都会重新生成对象并赋给引用。

qq_43842093的博客 891

史上最详细的sqlmap使用教程

sqlmapsqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等Sqlmap采用了以下5种独特的SQL注入技术基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入。

大河之犬的博客 5万+

Java中的值传递和引用传递详解

Java中的值传递和引用传递详解

寂夜了无痕的博客 1326

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java 值传递 引用传递_JAVA中的值传递和引用传递

先来看一个作为程序员都熟悉的值传递的例子:... ... //定义了一个改变参数值的函数 public static void changeValue(int x) { x = x *2; } ... ... //调用该函数 int num = 5; System.out.println(num); changeValue(num); System.out.println(num); ... .....

weixin_39816448的博客 91

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java函数(方法)中的值传递和引用传递问题

java函数(方法)中的值传递和引用传递问题 我想很多人如果从c/c++转向java开发的,并且有些项目经验的,对于函数中参数传递方式都会先入为主的,将c/c++那套分析参数传递方式搬过来理解java的参数传递方式,而且大部分都能解释的通,恩,开始我也是这么认为的,但后面看面试题,发现原来我一直错了,java中只存在值传递,只存在值传递!!!其实并不存在引用传递,因为java中是没有指针的。  ...

凌凌小博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JAVA中的值传递和引用传递

一、基本类型和引用类型的理解 Java中的数据类型分为两种为基本类型和引用类型。 1、基本类型的变量保存原始值,所以变量就是数据本身。 常见的基本类型:byte,short,int,long,char,float,double,Boolean,returnAddress。 2、引用类型的变量保存引用值,所谓的引用值就是对象所在内存空间的“首地址值”,通过对这个引用值来操作对象。 常见的引用类型:...

qq_45473292的博客 176

如何理解Java中的引用传递和值传递?

如何理解Java中的引用传递和值传递? 想必,大家都或多或少的听过Java都是值传递这句话吧,那为什么呢? 首先,想要区分两者,必须得知道什么是引用传递,什么是值传递: 值传递(pass by value):是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 引用传递(pass by reference):是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。 参数在程序语言中又分为形参和实参: 形式参

steamsb的博客 799

理解Java中的引用传递和值传递

为什么80%的码农都做不了架构师?>>> ...

weixin_33695450的博客 118

java中的值传递和引用传递

java中的值传递和引用传递到底是怎么回事 总结:java中只存在值传递 什么是值传递? 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数(方法)中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 什么是引用传递 引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数(方法)中,那么在函数中对参数所进行的修改,将影响到实际参数。 值传递和引用传递的区别 重点来了,为什么值传递不会影响到实际参数,而引用传递会影响到实际参数?其实这就

qq_44309181的博客 226

java中的值传递、引用传递和String传递详解

实例一:值传递 1.代码展示 public class Text13{ public static void main(String[] args){ int x=10; method(x); System.out.println(x); } public static void method(int mx){ mx=20; } } 看到这里,大家不妨猜一下,最后输出的结果是什么? 没错,这里输出结果是10,下面我们来具体分析...

qq_48728470的博客 901

[Java]Java中的值传递和引用传递

Java中的值传递和引用传递 参考:https://www.cnblogs.com/clara/archive/2011/09/17/2179493.html 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用...

一杯糖不加咖啡 199

java 值传递 引用传递_彻底理解Java中的值传递和引用传递

正文这里要注意的是:准确的来说只有值传递,调用子函数的所有操作都是值传递引用传递,最终还是值传递,传递的是对象的地址值传递比如我们打开我们的相关java调试类:我们都知道,声明一个变量后,计算机就会申明出来一个内存地址,值传递的时候为什么最后的值没有发生变化呢?下面我们来用图进行解释一下:第一步,声明 i,j 的变量,申请内存显示为第二步,执行交换时,申请内存显示为第三步,执行交换后,方法体的子涵...

weixin_39607873的博客 104

java值传递和引用传递的例子_Java中的值传递和引用传递

当一个变量最为一个参数传入方法内部的时候,会有两种不同的传递方式:值传递和引用传递。值传递的特点:不管方法内部对传进去的参数作任何改变,也不会影响方法外部的变量的值引用传递的特点:方法内部对传进去的参数作的改变也会影响方法外部的变量的值那么哪些是值传递,哪些是引用传递呢?1、基本类型(8种)的传递都是值传递2、引用类型(除String外)都是引用传递3、Strng比较特殊,它虽然是引用类型,但是却...

weixin_42550052的博客 759
上一篇: 在finally赋值无效与虚拟机栈
下一篇: 标准输出与标准错误输出
ardimo
博客等级 码龄18年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值