首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么将Java数组作为参数放在方法中会将其设置在方法之外?

将Java数组作为参数传递给方法时,实际上是将数组的引用传递给方法。在Java中,方法参数传递采用的是值传递的方式,即将变量的值复制一份传递给方法。对于基本数据类型,传递的是值本身;而对于引用类型,传递的是引用的副本。

当将数组作为参数传递给方法时,方法内部可以通过引用来访问和修改数组的内容。由于传递的是引用的副本,所以方法内部对数组内容的修改会影响到原始数组。这是因为数组在内存中是连续存储的,通过引用可以直接访问到数组的内存空间。

需要注意的是,虽然方法内部可以修改数组的内容,但是无法改变原始数组的引用。换句话说,方法内部无法改变原始数组的指向其他数组的引用。这是因为方法参数传递的是值的副本,对于引用类型,传递的是引用的副本,而不是引用本身。

总结起来,将Java数组作为参数传递给方法时,方法内部可以修改数组的内容,但无法改变原始数组的引用。这样设计的好处是可以避免在方法内部意外修改原始数组的引用,确保方法的行为更加可控和可预测。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java数组 强制类型转换

class java.lang.String class java.lang.String class java.lang.Integer   根据实验,一开始就声明为String数组,可以需要时自动转为...这就神奇了,既然我参数传入的时候还是String数组为什么data.toArray();就成了Object数组了呢???难道是data.toArray()这个方法搞鬼??   ...Math.min(original.length, newLength)); return copy; } }   那么问题来了,这个作为参数传入的...返回到二参数copyOf()方法中的时候,这里的T数组我们已经假设为String数组(因为我们假设elementData是String数组),Array.newInstance()产生的数组强转为...数组数组转成了Object数组,并存放在elementData中,而无参的toArray()方法并没有对其特殊处理,直接返回了一个Object数组(虽然里面元素仍然是String)。

1.8K40

Spring Boot启动命令参数详解及源码分析

,通过上述参数将其修改为8081端口,而且通过命令行传递的参数具有更高的优先级,会覆盖同名的其他配置参数。...系统参数,该参数会被设置到系统变量中,使用示例如下: java -jar -Dserver.port=8081 xxx.jar 参数值的获取 选项参数和非选项参数均可以通过ApplicationArguments...通过上面的示例我们已经发现使用选项参数时,参数命令中是位于xxx.jar之后传递的,而系统参数是紧随java -jar之后。...如果系统参数放在jar包后面,问题会更严重。会出现可以正常启动,但参数无法生效。这也是为什么有时候明明传递了参数但是却未生效,那很可能是因为把参数的位置写错了。...执行SpringApplication的run方法的过程中会获得传入的参数,并封装为ApplicationArguments对象。

6.1K20
  • JVM 学习笔记(二)

    局部变量表   方法中定义的局部变量以及方法参数放在这张表中,局部变量表中的变量不可直接使用,如需要使用的话,必 须通过相关指令将其加载至操作数栈中作为操作数使用。...三:方法区元素指向   方法中会存放静态变量,常量等数据。如果是下面这种情况,就是典型的方法区中元素指向堆中的对象。   ...四:堆指向方法区   方法中会包含类的信息,堆中会有对象,那怎么知道对象是哪个类创建的呢? ?   一个对象怎么知道它是由哪个类创建出来的?怎么记录?这就需要了解一个Java对象的具体信息了。...Old区也会有GC的操作,Old区的GC我们称作为Major GC。...为什么需要两个Survivor区?   最大的好处就是解决了碎片化。也就是说为什么一个Survivor区不行?第一部分中,我们知道了必须设置Survivor区。

    36610

    Java中的语法糖

    但是,如果一个 Integer 类型的数据放入到 List 中或者一个 String 类型的数据放在 List 中是不允许的。...如下图所示 无法一个 Integer 类型的数据放在 List 和无法一个 String 类型的数据放在 List 中是一样会编译失败。...除此之外,编译器还会为我们生成两个方法, values() 方法和 valueOf 方法,这两个方法都是编译器为我们添加的方法,通过使用 values () 方法可以获取所有的 Enum 属性值,...变长参数特性是 JDK 1.5 中引入的,使用变长参数有两个条件,一是变长的那一部分参数具有相同的类型,二是变长参数必须位于方法参数列表的最后面。...# 1.9 断言 你 Java 中使用过断言作为日常的判断条件吗? 断言:也就是所谓的 assert 关键字,是 jdk 1.4 后加入的新功能。

    17920

    Java 中的语法糖有哪些呢

    但是,如果一个 Integer 类型的数据放入到 List 中或者一个 String 类型的数据放在 List 中是不允许的。...如下图所示 image.png 无法一个 Integer 类型的数据放在 List 和无法一个 String 类型的数据放在 List 中是一样会编译失败。...注意,Enum 的 values() 方法不属于 JDK API 的一部分, Java 源码中,没有 values() 方法的相关注释。...变长参数特性是 JDK 1.5 中引入的,使用变长参数有两个条件,一是变长的那一部分参数具有相同的类型,二是变长参数必须位于方法参数列表的最后面。...断言 你 Java 中使用过断言作为日常的判断条件吗? 断言:也就是所谓的 assert 关键字,是 jdk 1.4 后加入的新功能。

    1.3K75

    CommonsCollections2 反序列化链分析

    set set(Object obj, Object value) 设置域为代表的这 Field对象指定对象上的参数指定的新值。...,为什么创建该类要将其父类设置为AbstractTranslet,带着这个疑惑我们继续往下分析。...上的_name字段设置为test 第二部分代码主要进行的操作为通过反射获取到templatesImpl的_bytecodes字段,然后再将其设置为第一部分创建类转换而成的字节码,_name也是通过同样的方法设置为...在上图箭头指向的部分可以看见结果强转为AbstractTranslet类类型,这就能解释清楚第一个问题为什么要将自定义类的父类设置为AbstractTranslet 知道了getTransletInstance...queue的queue字段内容Object数组,内容为templatesImpl 设置queue.queue为Object数组,其内容为两个内置恶意代码的TemplatesImpl实例化对象,这样调用

    35650

    Java编程思想读书笔记(二)【一切都是对象】

    常量通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。 嵌入式系统中,常量本身会和其他部分隔离开,所有这种情况下,可以选择将其放在ROM(只读存储器)中。...2.2.3 Java中的数组 Java主要目标之一是安全性。 Java确保数组会被初始化,而且不能在它的范围之外被访问。这种范围检查,是以每个数组上少量的内存开销及运行时的下标检查为代价。...Argument list(参数列表)给出了要传给方法的信息的类型和名称。 方法名和参数列表(它们合起来被称为“方法签名”)唯一地标识出某个方法Java中的方法只能作为类的一部分来创建。...只须将static关键字放在定义之前,就可以字段或方法设定为static。...-_- main()方法参数是一个String对象的数组Java编译器要求必须这么做,因为args要用来存储命令行参数

    33720

    第1篇——变量和数组

    Fields) 相当于C++中类的静态成员变量 Local Variables 方法通常会将其临时状态存储局部变量中 Parameters Parameters指的是方法参数...例如: char[] str; str = new char[3]; 上述代码中的中括号[],可以放在变量名之前,也可以放在变量名之后,例如char str[],根据惯例是不鼓励中括号放在变量名之后的...数组操作 Java SEjava.util.Arrays类中提供了很多方法以方便数组操作,下面是常见的一些方法。...//tmp中的所有元素转为String,并以逗号分割,放在中括号中 总结 Java 编程语言同时使用“字段”和“变量”作为其术语的一部分。...方法中的变量是局部变量。参数是为方法提供额外信息的变量;局部变量和参数总是被归类为“变量”(而不是“字段”)。 参考资料:Java8官方教程

    37540

    【Android RTMP】x264 图像数据编码 ( Camera 图像数据采集 | NV21 图像数据传到 Native 处理 | JNI 传输字节数组 | 局部引用变量处理 | 线程互斥 )

    Java 中定义的方法 : Java 中传递的参数类型为 byte[] , 字节数组类型 ; public native void native_encodeCameraData(byte[] data...jbyte * 类型 ; // Java 层的 byte 数组类型 jbyteArray 转为 jbyte* 指针类型 // 注意这是局部引用变量, 不能跨线程, 跨方法调用, 需要将其放在堆内存中..., 不能跨线程 , 跨方法调用 , 超出作用域后立刻失效 , 如果要使用该数据 , 需要将其放在堆内存中 ; ③ 回收内存 : 局部引用要在作用域结束前主动回收内存 , 不要等系统自动回收 , 避免不必要的内存抖动...; // Java 层的 byte 数组类型 jbyteArray 转为 jbyte* 指针类型 // 注意这是局部引用变量, 不能跨线程, 跨方法调用, 需要将其放在堆内存中..., 跨方法调用, 需要将其放在堆内存中 jbyte* dataFromJava = env->GetByteArrayElements(data, NULL); // jbyte 是

    49130

    Java 语法糖

    但是,如果一个 Integer 类型的数据放入到 List 中或者一个 String 类型的数据放在 List 中是不允许的。...如下图所示 image.png 无法一个 Integer 类型的数据放在 List 和无法一个 String 类型的数据放在 List 中是一样会编译失败。...注意,Enum 的 values() 方法不属于 JDK API 的一部分, Java 源码中,没有 values() 方法的相关注释。...变长参数特性是 JDK 1.5 中引入的,使用变长参数有两个条件,一是变长的那一部分参数具有相同的类型,二是变长参数必须位于方法参数列表的最后面。...断言 你 Java 中使用过断言作为日常的判断条件吗? 断言:也就是所谓的 assert 关键字,是 jdk 1.4 后加入的新功能。

    66794

    Java 中的语法糖,真甜。

    但是,如果一个 Integer 类型的数据放入到 List 中或者一个 String 类型的数据放在 List 中是不允许的。 如下图所示 ?...无法一个 Integer 类型的数据放在 List 和无法一个 String 类型的数据放在 List 中是一样会编译失败。...注意,Enum 的 values() 方法不属于 JDK API 的一部分, Java 源码中,没有 values() 方法的相关注释。...变长参数特性是 JDK 1.5 中引入的,使用变长参数有两个条件,一是变长的那一部分参数具有相同的类型,二是变长参数必须位于方法参数列表的最后面。...断言 你 Java 中使用过断言作为日常的判断条件吗? 断言:也就是所谓的 assert 关键字,是 jdk 1.4 后加入的新功能。

    51420

    Java基础知识:JVM内存结构

    整体结构 jvm虚拟机分为 5大区域 ,程序计数器、虚拟机栈、本地方法栈、java堆、方法区; 程序计数器(PC寄存器):线程私有的,是一块很小的内存空间,作为当前线程的行号指示器,用于记录当前虚拟机正在执行的线程指令地址...) 方法返回地址(Return Address)(或方法正常退出或者异常退出的定义) 一些附加信息: 局部变量表定义为一个数字数组,主要用于存储方法参数和定义方法体内的局部变量,这些数据类型包括各类基本数据类型...同时我们给每个对象设置了一个年龄计数器,经过一次回收后还存在的对象,将其年龄加 1。...常用参数 -XX:MetaspaceSize=N //设置 Metaspace 的初始(和最小大小) -XX:MaxMetaspaceSize=N //设置 Metaspace 的最大大小 与永久代很大的不同就是...栈、堆、方法区的交互关系 Person 类的 .class 信息存放在方法区中 person 变量存放在 Java 栈的局部变量表中 真正的 person 对象存放在 Java 堆中 person

    73030

    2019年JVM最新面试题,必须收藏它

    5、什么是类的加载 类的加载指的是类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后堆区创建一个java.lang.Class对象,用来封装类方法区内的数据结构。...当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(符号引用替换为直接引用)三个步骤。...出对象程序中使用 卸载,执行垃圾回收 10、Java 中会存在内存泄漏吗,请简单描述。...这种方法会跟Java对象的生命周期堆内存划分为不同的区域,垃圾收集过程中,可能会将对象移动到不同区域: 伊甸园(Eden):这是对象最初诞生的区域,并且对大多数对象来说,这里是它们唯一存在过的区域。...出现在递归方法参数个数过多,递归过深,递归没有出口。

    62640

    你编写的Java代码是咋跑起来的?

    另外,托管环境还提供了诸如数组越界、动态类型、安全权限等等的动态检测,使我们免于书写这些无关业务逻辑的代码。 JVM 是怎样运行 Java 代码的呢? JVM 具体是怎么运行 Java 字节码的呢?...热点代码使用 JIT 编译为可执行的机器码 非热点代码使用解释器解释执行所有字节码 其中,在运行过程中会被即时编译的热点代码有两类: 被多次调用的方法 被多次执行的循环体 针对第一类,编译器会将整个方法作为编译对象...对于第二类是由循环体出发的,但是编译器依然会以整个方法作为编译对象,因为发生在方法执行过程中,称为栈上替换。...为了不干扰应用的正常运行,HotSpot 的即时编译是放在额外的编译线程中进行的。HotSpot 会根据 CPU 的数量设置编译线程的数目,并且按 1:2 的比例配置给 C1 及 C2 编译器。...JVM 运行时内存区域划分为五个部分,分别为方法区、堆、PC 寄存器、Java 方法栈和本地方法栈。Java 程序编译而成的 class 文件,需要先加载至方法区中,方能在 JVM 中运行。

    73330

    Unity通用渲染管线(URP)系列(十四)——多相机(Camera Blending & Rendering Layers)

    我们无法这些设置直接添加到Camera组件中,因此我们创建一个补充的CustomRenderPipelineCamera组件。只能将其添加到作为相机的游戏对象一次,并且只能添加一次。...(overlay相机的设置组件) 1.5 渲染纹理 除了创建分屏显示或直接对相机进行分层之外,通常还可以摄像头用于游戏内显示或作为GUI的一部分。...因此,CustomRenderPipelineAsset转换为局部类。 ? 然后为其创建一个覆盖属性的仅编辑器脚本资产。它返回一个字符串数组,我们可以静态构造函数方法中创建它。...我们负责遮罩发送到GPU。通过将其存储_DirectionalLightDirections和_OtherLightDirections数组的未使用的第四部分中,来完成此操作。...Light.renderingLayerMask属性将其位掩码公开为int,并且转换过程中会出现乱码,从而在light setup方法中浮动。

    8.7K22

    你编写的Java代码是咋跑起来的?

    另外,托管环境还提供了诸如数组越界、动态类型、安全权限等等的动态检测,使我们免于书写这些无关业务逻辑的代码。 JVM 是怎样运行 Java 代码的呢? JVM 具体是怎么运行 Java 字节码的呢?...)3.热点代码使用 JIT 编译为可执行的机器码4.非热点代码使用解释器解释执行所有字节码 其中,在运行过程中会被即时编译的热点代码有两类: 1.被多次调用的方法2.被多次执行的循环体 针对第一类,编译器会将整个方法作为编译对象...对于第二类是由循环体出发的,但是编译器依然会以整个方法作为编译对象,因为发生在方法执行过程中,称为栈上替换。...为了不干扰应用的正常运行,HotSpot 的即时编译是放在额外的编译线程中进行的。HotSpot 会根据 CPU 的数量设置编译线程的数目,并且按 1:2 的比例配置给 C1 及 C2 编译器。...JVM 运行时内存区域划分为五个部分,分别为方法区、堆、PC 寄存器、Java 方法栈和本地方法栈。Java 程序编译而成的 class 文件,需要先加载至方法区中,方能在 JVM 中运行。

    51700

    5. java 对象是如何创建的?new背后到底做了什么

    划分内存的方法: “指针碰撞”(Bump the Pointer)(默认用指针碰撞) 如果Java堆中内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点 的指示器...对象逃逸分析:就是分析对象动态作用域,当一个对象方法中被定义后,它可能被外部方法所引用,例如作为调用参 数传递到其他地方中。 ?...比如设置JVM参数:-XX:PretenureSizeThreshold=1000000 (单位是字节) -XX:+UseSerialGC ,再执行下上面的第一个程序会发现大对象直接进了老年代,为什么要这样呢...长期存活的对象进入老年代 既然虚拟机采用了分代收集的思想来管理内存,那么内存回收时就必须能识别哪些对象应放在新生代,哪些对象应放在老年代中。...(1)如果一个网页浏览结束时就进行内容的回收,则按后退查看前面浏览过的页面时,需要重新构建 (2)如果浏览过的网页存储到内存中会造成内存的大量浪费,甚至会造成内存溢出 弱引用 将对象用WeakReference

    76730

    19. Groovy 面向对象编程-注解学习

    java.lang.annotation.annotation: java的注解对象。 以上对象组成的Array数组对象。 下面结合更多的示例进行了解吧。...除了限制参数。就没有其他的作用了吗?不要急。 2.4 保留策略 注解的可见性取决于其保留策略。注解的保留策略是使用java.lang.annotation.Retention设置的。...tasks) } } else { m.invoke(tasks) //否则直接执行,也是就是为什么输出结果中会有...这意味着我们的元注解可能是预编译的,或者可以将其放在与当前编译的源码树相同的源码树中。 要注意:元注解是Groovy独有的特性。不能用元注解注解Java类。...它在编译过程中会被编译器自动进行拆分为它聚合的多个注解。 从元注解到收集的注解的转换语义分析编译阶段执行。 除了用收集的注解替换别名之外,元注解还能够处理它们,包括参数

    74620
    领券