博客
关于我
Java变量之间传值 - 值传递还是引用传递的讨论
阅读量:792 次
发布时间:2023-01-28

本文共 441 字,大约阅读时间需要 1 分钟。

Java中变量的传递分为值传递和引用传递。值传递主要针对简单类型(基本类型和通过字符串直接赋值的字符串),而引用传递则针对对象和包装类型。

值传递:

  • 所有基本类型和通过直接赋值的字符串都是按值传递的。方法调用时,会为参数创建一个新的拷贝,因此在方法内部修改不会影响原参数。
  • 包装类型的值传递由于JVM的自动拆箱,实际上依然按值传递。

引用传递:

  • 对于对象和大多数类型(如Integer, StringBuffer等),传递的是对象的引用(即内存地址)。
  • 一个对象可以有多个引用,即便引用的值相同,它们都指向同一个对象。

区别:

  • 简单类型直接赋值的字符串按值传递,修改不影响原值。
  • 其他类型按引用传递,修改会影响原对象。

特殊注意:

  • 字符串的特殊性:在Java中,字符串的赋值方式导致其单独作为特殊值传递。
  • Object类的引用传递,修改会影响外部值。

结论:

  • Java按值传递和按引用传递的理解取决于参数类型。
  • 只有简单类型和通过字符串赋值的字符串是按值传递,其余类型为引用传递。

转载地址:http://usryk.baihongyu.com/

你可能感兴趣的文章
Docker部署postgresql-11以及主从配置
查看>>
EnvironmentNotWritableError: The current user does not have write permissions to the target environm
查看>>
kali安装docker(亲测有效)
查看>>
Linux系列:Linux目录分析:[/] + [/usr] + [/usr/local] + [/usr/local/app-name]、Linux最全环境配置 + 动态库/静态库配置
查看>>
mysql系列:远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法
查看>>
Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务、snmp服务
查看>>
PHP系列:PHP 基础编程 2(时间函数、数组---实现登录&注册&修改)
查看>>
PHP系列:使用PHP实现登录注册功能的完整指南
查看>>
Python&aconda系列:cmd/powershell/anaconda prompt提示“系统找不到指定的路径”(亲测有效)
查看>>
Python&aconda系列:(W&L)Conda使用faiss-gpu报错及解决办法、安装numpy的坑、cmd执行Python脚本找不到第三方库、安装tensorflow-gpu时遇到的from
查看>>
python&anconda 系列:Pycharm在debug问题的N种解决方案(一般程序、web方向、人工智能方向)
查看>>
python&anconda系列(亲测有效):tensorflow AttributeError: ‘str’ object has no attribute ‘decode’
查看>>
python&anconda系列:tf.keras.backend.get_session()和keras.backend.get_会话()返回不同的会话对象(待解答)
查看>>
"WARNING: Increasing RAM size to 1GB" and "Cannot set up guest memory 'xxx.ram': Invalid argument".
查看>>
#if 0 #elif 1 #else #endif 用法
查看>>
(反射+内省机制的运用)简单模拟spring IoC容器的操作
查看>>
(转)tomcat7.0 manager app和host manager web管理
查看>>
.Net(C#)实现异步编程
查看>>
.Net中webBrowser控件JS交互
查看>>
02-Docker镜像分类及操作秘籍,轻松掌握导出、导入、删除
查看>>