前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java中的参数传递-值传递、引用传递

java中的参数传递-值传递、引用传递

作者头像
chenchenchen
发布于 2022-11-29 13:03:37
发布于 2022-11-29 13:03:37
5.6K00
代码可运行
举报
文章被收录于专栏:chenchenchenchenchenchen
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Example{
    String str = new String("good");
    char[ ] ch = { 'a' , 'b' , 'c' };
    public static void main(String args[]){
        Example ex = new Example();
        ex.change(ex.str,ex.ch);
        System.out.print(ex.str + " and ");
        System.out.print(ex.ch);
    }
    public void change(String str,char ch[ ]){
        str = "test ok";
        ch[0] = 'g';
    }
}

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输出
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
good and gbc

参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递。

在 Java 应用程序中永远不会传递对象,而只传递对象引用。因此是按引用传递对象。Java 应用程序按引用传递对象这一事实并不意味着 Java 应用程序按引用传递参数。参数可以是对象引用,而 Java 应用程序是按值传递对象引用的。

Java 应用程序中的变量可以为以下两种类型之一:引用类型或基本类型。当作为参数传递给一个方法时,处理这两种类型的方式是相同的。两种类型都是按值传递的;没有一种按引用传递。

按值传递和按引用传递。按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。

1、对象是按引用传递的

2、Java 应用程序有且仅有的一种参数传递机制,即按值传递

3、按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本

4、按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本

首先考试大来看看第一点:对象是按引用传递的

  确实,这一点我想大家没有任何疑问,例如:

  class Test01

  {

  public static void main(String[] args)

  {

  StringBuffer s= new StringBuffer("good");

  StringBuffer s2=s;

  s2.append(" afternoon.");

  System.out.println(s);

  }

  }

  对象s和s2指向的是内存中的同一个地址因此指向的也是同一个对象。

  如何解释“对象是按引用传递的”的呢?

  这里的意思是进行对象赋值操作是传递的是对象的引用,因此对象是按引用传递的,有问题吗?

  程序运行的输出是:

  good afternoon.

  这说明s2和s是同一个对象。

  这里有一点要澄清的是,这里的传对象其实也是传值,因为对象就是一个指针,这个赋值是指针之间的赋值,因此在java中就将它说成了传引用。(引用是什么?不就是地址吗?地址是什么,不过就是一个整数值)

  再看看下面的例子:

  class Test02

  {

  public static void main(String[] args)

  {

  int i=5;

  int i2=i;

  i2=6;

  System.out.println(i);

  }

  }

  程序的结果是什么?5!!!

  这说明什么,原始数据类型是按值传递的,这个按值传递也是指的是进行赋值时的行为下一个问题:Java 应用程序有且仅有的一种参数传递机制,即按值传递

  class Test03

  {

  public static void main(String[] args)

  {

  StringBuffer s= new StringBuffer("good");

  StringBuffer s2=new StringBuffer("bad");

  test(s,s2);

  System.out.println(s);//9

  System.out.println(s2);//10

  }

  static void test(StringBuffer s,StringBuffer s2) {

  System.out.println(s);//1

  System.out.println(s2);//2

  s2=s;//3

  s=new StringBuffer("new");//4

  System.out.println(s);//5

  System.out.println(s2);//6

  s.append("hah");//7

  s2.append("hah");//8

  }

  }

  程序的输出是:

  good

  bad

  new

  good

  goodhah

  bad

  考试大提示: 为什么输出是这样的?

  这里需要强调的是“参数传递机制”,它是与赋值语句时的传递机制的不同。

  我们看到1,2处的输出与我们的预计是完全匹配的

  3将s2指向s,4将s指向一个新的对象

  因此5的输出打印的是新创建的对象的内容,而6打印的原来的s的内容

  7和8两个地方修改对象内容,但是9和10的输出为什么是那样的呢?

  Java 应用程序有且仅有的一种参数传递机制,即按值传递。

在这里画了一个图给大家分析:

1.对象就是传引用

2.原始类型就是传值

3.String类型因为没有提供自身修改的函数,每次操作都是新生成一个String对象,所以要特殊对待。可以认为是传值。

参考:https://blog.csdn.net/yqlakers/article/details/70144766 http://www.cnblogs.com/perfy/archive/2012/10/16/2726039.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
CVPR2023 | Tensor4D 高效动态神经辐射场
由一个将所有场景变形映射到一个共同的正则配置的变形网络和一个从每个相机射线回归体积密度相关和视相关的RGB颜色的规范网络构成。
用户1324186
2023/09/09
7530
CVPR2023 | Tensor4D 高效动态神经辐射场
经典论文 | Nerf: 将场景表示为用于视图合成的神经辐射场
计算机视觉中一个研究方向是在 MLP 的权重中编码对象和场景,使得该 MLP 直接从 3D 空间位置映射到形状的隐式表示。然而,之前的方法无法使用离散的方式(如三角形网格或体素网格)以相同的保真度再现具有复杂几何形状的真实场景,迄今为止也仅限于表示具有低几何复杂性的简单形状,从而导致渲染过度平滑。NeRF提出将一个静态场景表示为5D输入,即:空间中某个位置的3D坐标以及观察方向,通过MLP神经网络得到该位置的颜色以及体密度,使用体绘制技术可以得到输入相机位姿条件下的视角图片,然后和 ground truth 做损失即可完成可微优化,从而渲染出连续的真实场景。
用户1324186
2022/11/07
3.7K0
经典论文 | Nerf: 将场景表示为用于视图合成的神经辐射场
CVPR 2024 | 巨幅提升24%!LiDAR4D会是LiDAR重建的答案么?
尽管神经辐射场(NeRFs)在图像新视角合成(NVS)方面取得了成功,但激光雷达NVS的发展却相对缓慢。之前的方法follow图像的pipeline,但忽略了激光雷达点云的动态特性和大规模重建问题。有鉴于此,我们提出了LiDAR4D,这是一种用于新的时空LiDAR视图合成的LiDAR-only的可微分框架。考虑到稀疏性和大规模特征,进一步设计了一种结合多平面和网格特征的4D混合表示,以实现从粗到细的有效重建。此外引入了从点云导出的几何约束,以提高时序一致性。对于激光雷达点云的真实重建,我们结合了ray-drop概率的全局优化,以保持cross-region模式。在KITTI-360和NuScenes数据集上进行的大量实验证明了我们的方法在实现几何感知和时间一致的动态重建方面的优越性。
公众号-arXiv每日学术速递
2024/04/25
7540
CVPR 2024 | 巨幅提升24%!LiDAR4D会是LiDAR重建的答案么?
ICCV 2023 | 单阶段扩散神经辐射场:3D生成与重建的统一方法
在计算机视觉和图形领域,由于神经渲染和生成模型的进步,三维视觉内容的合成引起了显著关注。尽管出现了许多处理单个任务的方法,例如单视图/多视图三维重建和三维内容生成,但开发一个综合框架来整合多个任务的最新技术仍然是一个主要挑战。例如,神经辐射场(NeRF)在通过每个场景的拟合解决逆向渲染问题方面展示了令人印象深刻的新视图合成结果,这适用于密集视图输入,但难以泛化到稀疏观察。相比之下,许多稀疏视图三维重建方法依赖于前馈图像到三维编码器,但它们无法处理遮挡区域的不确定性并生成清晰的图像。在无条件生成方面,三维感知的生成对抗网络(GAN)在使用单图像鉴别器方面部分受限,这些鉴别器无法推理跨视图关系以有效地从多视图数据中学习。 在这篇论文中,作者通过开发一个全面模型来从多视图图像中学习可泛化的三维先验,提出了一种统一的方法来处理各种三维任务。受到二维扩散模型成功的启发,论文提出了单阶段扩散NeRF(SSDNeRF),它使用三维潜在扩散模型(LDM)来模拟场景潜在代码的生成先验。 虽然类似的LDM已经应用于之前工作中的二维和三维生成,但它们通常需要两阶段训练,其中第一阶段在没有扩散模型的情况下预训练变分自编码器(VAE)或自解码器。然而,在扩散NeRF的情况下,作者认为两阶段训练由于逆向渲染的不确定性特性,特别是在从稀疏视图数据训练时,会在潜在代码中引入噪声模式和伪影,这阻碍了扩散模型有效地学习清晰的潜在流形。为了解决这个问题,论文引入了一种新的单阶段训练范式,使扩散和NeRF权重的端到端学习成为可能。这种方法将生成和渲染偏差协调地融合在一起,整体上提高了性能,并允许在稀疏视图数据上进行训练。此外,论文展示了无条件扩散模型学习到的三维先验可以在测试时从任意观察中灵活地采样用于三维重建。 论文在多个类别单一对象场景的数据集上评估了SSDNeRF,整体展示了强大的性能。论文的方法代表了朝着各种三维任务统一框架的重要一步。总结来说,论文的主要贡献如下:
用户1324186
2024/03/20
5070
ICCV 2023 | 单阶段扩散神经辐射场:3D生成与重建的统一方法
CVPR 2024 | Scaffold-GS:自适应视角渲染的结构化 3D 高斯
神经辐射场利用基于学习的参数模型来产生连续的渲染图像,并保留更多的细节。然而,其耗时的随机采样,会导致性能下降和出现潜在的噪声。
用户1324186
2024/05/20
1.8K0
CVPR 2024 | Scaffold-GS:自适应视角渲染的结构化 3D 高斯
InstantAvatar:从 60 秒单目视频中学习数字人化身
创建高保真数字人类对于许多应用都很重要,包括全息投影、AR/VR、3D 图形学和新兴的元宇宙等概念。目前获取个性化头像是一个复杂的过程,通常需要使用校准的多摄像头系统,并产生大量的计算成本。在本文中,作者着手构建一个仅从单眼视频学习 3D 虚拟人的系统,该系统足够轻便,可以广泛部署,并且速度足够快,可以实现步行和使用场景。
用户1324186
2023/02/03
2K0
AAAI 2024 | 深度引导的快速鲁棒点云融合的稀疏 NeRF
具有稀疏输入视图的新视角合成方法对于AR/VR和自动驾驶等实际应用非常重要。大量该领域的工作已经将深度信息集成到用于稀疏输入合成的NeRF中,利用深度先验协助几何和空间理解。然而,大多数现有的工作往往忽略了深度图的不准确性,或者只进行了粗糙处理,限制了合成效果。此外,现有的深度感知NeRF很少使用深度信息来创建更快的NeRF,总体时间效率较低。为了应对上述问题,引入了一种针对稀疏输入视图量身定制的深度引导鲁棒快速点云融合NeRF。这是点云融合与NeRF体积渲染的首次集成。具体来说,受TensoRF的启发,将辐射场视为一个的特征体素网格,由一系列向量和矩阵来描述,这些向量和矩阵沿着各自的坐标轴分别表示场景外观和几何结构。特征网格可以自然地被视为4D张量,其中其三个模式对应于网格的XYZ轴,第四个模式表示特征通道维度。利用稀疏输入RGB-D图像和相机参数,我们将每个输入视图的2D像素映射到3D空间,以生成每个视图的点云。随后,将深度值转换为密度,并利用两组不同的矩阵和向量将深度和颜色信息编码到体素网格中。可以从特征中解码体积密度和视图相关颜色,从而促进体积辐射场渲染。聚合来自每个输入视图的点云,以组合整个场景的融合点云。每个体素通过参考这个融合的点云来确定其在场景中的密度和外观。
用户1324186
2024/03/07
8500
AAAI 2024 | 深度引导的快速鲁棒点云融合的稀疏 NeRF
联合NeRF与特征网格,实现超大规模城市渲染,高效且逼真
机器之心报道 编辑:侯佳宁 在这项工作中,研究人员以大型城市场景渲染为目标,提出一个新的框架,集成了基于 MLP 的 NeRF 与显式 3D 重建的特征网格,以有效地编码局部和全局场景信息。该方法克服了现有方法在大规模场景中应用的各种缺点,即使在大规模城市场景中也能实现高保真度的渲染,这对于现实世界的应用场景至关重要。 纯基于 MLP 的神经辐射场(NeRF)由于模型容量有限,在大规模场景模糊渲染中往往存在欠拟合现象。最近有研究者提出对场景进行地理划分、并采用多个子 NeRF,分别对每个区域进行建模,然而,
机器之心
2023/05/09
4780
联合NeRF与特征网格,实现超大规模城市渲染,高效且逼真
SceneRF具有辐射场的自监督单目三维场景重建
之前一直都是在基于ColMap、OpenMVG、OpenMVS这些传统多视图几何的方法进行三维重建,但这些框架一方面无法在线端到端得完成重建,另一方面需要很多张高质量的RGB图。深度学习三维重建的方案往往又需要大量的标签来训练,泛化能力也比较弱,自监督3D重建方案一般也是去重建某个目标物体,直接对场景进行重建的工作还比较少。偶然间看到了SceneRF这篇论文,它可以基于单帧图像进行三维重建,感觉很神奇!
BBuf
2022/12/29
1.3K0
SceneRF具有辐射场的自监督单目三维场景重建
SIGGRAPH Asia 2023 | Im4D:动态场景的高保真实时新视角合成
动态视图合成是在给定输入视频的情况下渲染出真实动态场景的新视图,这是计算机视觉和图形学中一个长期存在的研究问题。这个问题的关键在于从多视角视频中有效地重建动态场景的 4D 表示,并允许在任意视点和时间上保持高保真度和实时渲染。
用户1324186
2023/12/28
5450
SIGGRAPH Asia 2023 | Im4D:动态场景的高保真实时新视角合成
六问Nerf | 简单易懂的神经辐射场入门介绍
最近零散时间,翻了一批讲Nerf原理的CSDN/知乎/B站文章和视频,有些讲的还是不错的,但是有些实在是让人感觉,作者本身就没搞懂啥是神经辐射场。所以本文使用自问自答的方式,尝试直击要害的讲清楚Nerf是干什么的。
一点人工一点智能
2023/01/15
5.6K0
六问Nerf | 简单易懂的神经辐射场入门介绍
6DoF视频技术研究进展
作者:王旭, 刘琼, 彭宗举, 侯军辉, 元辉, 赵铁松, 秦熠, 吴科君, 刘文予, 杨铀
一点人工一点智能
2023/08/24
8670
6DoF视频技术研究进展
ICCV 2023 | Seal-3D:神经辐射场的交互式像素级编辑
NeRF 在例如 3D 重建、自由视角合成以及 VR/AR 等众多 3D 应用中都具有巨大的潜力。随着这种隐式表征方式的流行,能够与这种类型的 3D 模型进行用户友好型编辑交互的工具被迫切需要。由于捕获数据的噪声和重建算法的限制,从真实世界重建的对象可能包含伪影。一方面,在典型的 3D 扫描流程中经常会有手动校正和细化以去除伪影的阶段。另一方面,在 3D 游戏、动画和拍摄等 3D 内容创建应用程序中,艺术创作者通常需要基于现有的 3D 模型创建新内容。
用户1324186
2023/09/09
4940
ICCV 2023 | Seal-3D:神经辐射场的交互式像素级编辑
ICCV 2023 | LERF:语言嵌入的辐射场
神经辐射场(NeRFs)已成为一种强大用于捕捉复杂现实世界 3D 场景的真实数字表征的技术。然而,NeRF 的即时输出只是一个有颜色的密度场,没有实际意义或上下文信息,这阻碍了构建与所生成的 3D 场景进行交互的接口。自然语言是用于与 3D 场景交互的直观接口。以图 1 中的厨房为例,想象一下,通过询问“餐具”在哪里,或者更具体地说,询问你可以用来“搅拌”的工具,甚至询问你最喜欢的带有特定标志的马克杯,你就可以对这个厨房了如指掌。这不仅需要处理自然语言输入查询的能力,还需要具有在多个尺度上整合语义,并与长尾和抽象概念相关的能力。
用户1324186
2023/11/24
4740
ICCV 2023 | LERF:语言嵌入的辐射场
神经辐射场去掉「神经」,训练速度提升100多倍,3D效果质量不减
没有了神经网络,辐射场(Radiance Fields)也能达到和神经辐射场(Neural Radiance Fields,NeRFs)相同的效果,但收敛速度快了 100 多倍。 2020 年,加州大学伯克利分校、谷歌、加州大学圣地亚哥分校的研究者提出了一种名为「NeRF」的 2D 图像转 3D 模型,可以利用少数几张静态图像生成多视角的逼真 3D 图像。其改进版模型 NeRF-W (NeRF in the Wild)还可以适应充满光线变化以及遮挡的户外环境,分分钟生成 3D 旅游观光大片。
机器之心
2021/12/28
1.6K0
神经辐射场去掉「神经」,训练速度提升100多倍,3D效果质量不减
SIGGRAPH 2023 | 用于实时辐射场渲染的 3D Gaussian Splatting
网格和点是最常见的可以用于基于 GPU/CUDA 快速光栅化的显式三维场景表征方式。而神经辐射场基于 MLP 使用体渲染对捕捉的场景化进行自由视角合成。而提升辐射场效率的方案目前多基于体素、哈希网格或是点。辐射场方法的连续性有助于场景的优化,但是渲染过程中所需的随机采样需要的花销较大同时会带来噪声。因此,在本文中,作者提出了一种新的方法:本文所提出的 3D 高斯表达在能达到 sota 视觉质量和可比的渲染时间的同时,本文所提出的基于 tile 的 Splatting 方法可以实时渲染 1080p 的结果。
用户1324186
2023/10/10
1.8K0
SIGGRAPH 2023 | 用于实时辐射场渲染的 3D Gaussian Splatting
【他山之石】3D Gaussian Splatting:实时的神经场渲染
“他山之石,可以攻玉”,站在巨人的肩膀才能看得更高,走得更远。在科研的道路上,更需借助东风才能更快前行。为此,我们特别搜集整理了一些实用的代码链接,数据集,软件,编程技巧等,开辟“他山之石”专栏,助你乘风破浪,一路奋勇向前,敬请关注。
马上科普尚尚
2023/12/15
3K0
【他山之石】3D Gaussian Splatting:实时的神经场渲染
每日学术速递3.29
1.Grid-guided Neural Radiance Fields for Large Urban Scenes
AiCharm
2023/05/15
2610
每日学术速递3.29
NeRFs和3D高斯溅射技术如何重塑SLAM:综述
文章:How NeRFs and 3D Gaussian Splatting are Reshaping SLAM: a Survey
点云PCL博主
2024/06/21
1.7K0
NeRFs和3D高斯溅射技术如何重塑SLAM:综述
CVPR2024 | HUGS:人体高斯溅射
真实渲染和人体动态是一个重要的研究领域,具有在AR/VR、视觉特效、虚拟试衣、电影制作等众多应用。早期的工作创建人类化身依赖于多相机捕捉设置中的高质量数据捕捉、大量计算和大量手工努力。最近的工作通过使用3D参数化身体模型如SMPL,直接从视频生成3D化身来解决这些问题,这些模型具有高效光栅化和适应未见变形的能力。然而,参数化模型的固定拓扑结构限制了对衣物、复杂发型和其他几何细节的建模。最近的进展探索了使用神经场来建模3D人类化身,通常使用参数化身体模型作为建模变形的模版。神经场在捕捉衣物、配饰和头发等细节方面表现出色,超越了通过纹理和其他属性光栅化参数化模型所能实现的质量。然而,它们也有不足,特别是在训练和渲染效率方面较低。
用户1324186
2024/05/31
6220
CVPR2024 | HUGS:人体高斯溅射
推荐阅读
相关推荐
CVPR2023 | Tensor4D 高效动态神经辐射场
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验