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

为什么我的Java方法不能改变传递的变量?

Java中的方法参数传递方式是按值传递。这意味着当你将一个变量作为参数传递给一个方法时,实际上是将该变量的值复制一份传递给方法,而不是传递变量本身。

当你在方法内部修改参数的值时,实际上是修改了这个复制的值,而不是原始变量的值。因此,对于基本数据类型的参数,方法内部的修改不会影响原始变量的值。

对于引用类型的参数,实际上是将引用的副本传递给方法。引用指向的是对象在堆内存中的地址,而不是对象本身。因此,当你在方法内部修改引用指向的对象的属性时,会影响原始对象的属性值。但是,如果你在方法内部将引用指向一个新的对象,原始对象的引用不会受到影响。

总结起来,Java方法不能改变传递的变量是因为方法参数传递方式是按值传递,对于基本数据类型的参数,方法内部的修改不会影响原始变量的值;对于引用类型的参数,方法内部的修改会影响原始对象的属性值,但不能改变原始对象的引用。

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

  • 腾讯云云服务器(CVM):提供弹性计算能力,满足各种业务场景需求。产品介绍链接
  • 腾讯云云数据库MySQL版:提供高性能、可扩展的MySQL数据库服务。产品介绍链接
  • 腾讯云对象存储(COS):提供安全、稳定、低成本的云端对象存储服务。产品介绍链接
  • 腾讯云人工智能(AI):提供丰富的人工智能服务,包括图像识别、语音识别、自然语言处理等。产品介绍链接
  • 腾讯云物联网(IoT):提供全面的物联网解决方案,帮助连接和管理物联设备。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java筑基】——为什么java方法参数传递机制没有引用传递

前 言 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:深入、全面、系统介绍java基础知识 文章简介:本文将介绍为什么java方法参数传递机制没有引用传递...所谓引用传递是指在调用函数或者方法时将实际参数地址传递到函数中,那么在函数中对参数所进行修改,将影响到实际参数。 Java方法不能够独立存在,调用方法必须通过类或者对象来作为主调者。...方法中如果声明了形参,则调用方法时必须给这些形参指定参数值,调用方法时实际传递参数被称为实参。 Java使用值传递,将实际参数副本传入方法而实际参数本身不会受任何影响。...dw=null; 最后main()方法输出值仍然没有发生改变(9,6),说明main()方法中dw变量和swap()方法dw变量并不是同一个变量。...java方法使用引用变量作为形参仍然是值传递传递是参数副本。

64710
  • java方法参数传递(值传递和引用传递

    方法,必须有其所在类或对象调用时才有意义,若方法有参数: 形参:方法声明时参数; 实参:方法调用时实际传给形参参数值; java实参如何传入方法呢?...首先要明确:变量分为两大类:基础数据类型、引用数据类型。 基础数据类型参数传递方式只有一种:值传递。...总之,基本数据类型在传递参数过程中,先将实参值赋值到形参上,然后再在栈中开辟一个内存,将该值赋给新变量。...引用数据类型参数传递,原来实例化对象和新建立实例化对象都指向同一个对象,因此引用对象值改变会影响到new出来对象。...a被赋予初始值0,然后将ds对象传给形参ds1,此时,ds和ds1虽然在栈内存中都有着各自地址,但是它们都指向同一个对象DataSwap,然后通过ds1对象改变a值,实际上是改变了DataSwap对象

    2.1K40

    Java中static用法,static、public为什么不能修饰局部变量?

    人为规定,记住就好。 其实这些变量都之所以叫局部变量,其作用域也只限于声明它方法体内。在方法被调用时,这些局部变量获得内存空间,到方法执行结束时,他们所占据内存空间就被释放。 用完就释放。...静态变量叫类变量。 4.数据存储不一样 成员变量储存在堆内存对象中,也叫对象特有数据。 静态变量储存在方法静态区,所有也叫对象共享数据。...关于static用法: static变量 static表示“全局”或者“静态”意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量概念。...静态方法不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量。当然静态可以访问静态,非静态可以访问非静态。...可以直接通过类名来访问,访问语法为: 类名.静态方法名(参数列表…) 类名.静态变量名 static代码块 static代码块在jvm加载类时候会自动执行,但是static代码块不能方法

    2.8K10

    详解Java构造方法为什么不能覆盖,钻牛角尖病又犯了....

    三 但是,看了输出,就纳闷为什么为什么第三行不是BigEgg2.Yolk(),不能覆盖吗?...那么,他们构造方法为什么不能覆盖,都是Public Yolk(){}。 当然,网上都说子类继承父类除构造方法以外所有方法,但这是结果,要知道为什么!! 五 先说几个错误观点 1....有说构造方法方法名与类名必须一样,父子类不能同名,故不能继,所以不能覆盖构造方法。 这个不用多说,这个例子,就是大神写出来打这样说的人。 2....这个强行用中文语法来解释,达到中文6级了啊。 3. 有说构造方法不是成员函数,故不能继承,所以谈不上覆盖。 这个真的有道理,是java官方文档上。大多数人找到这里估计就满足了。...Java设计时候,他们绝对想到有些人会像强迫症那样折腾个同名类继承,然后实现构造覆盖场景吧.... 总结 构造方法是唯一不能又造爸爸又造儿子

    2.1K20

    为什么Java中类成员变量不能被重写?成员变量Java中能够被重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域方法

    这篇文章讨论了Java面向对象概念中一个基本概念--Field Hiding(成员变量隐藏) 成员变量Java中能够被重写么?...Paste_Image.png 按照我们已有的多态概念,第二个应该是输出sub才对,但却输出了super。这是为什么呢?...不会重写成员变量,而是隐藏成员变量 Java文档中对隐藏域定义: Within a class, a field that has the same name as a field in the superclass...意思就是: 在一个类中,子类中成员变量如果和父类中成员变量同名,那么即使他们类型不一样,只要名字一样。父类中成员变量都会被隐藏。在子类中,父类成员变量不能被简单用引用来访问。...其实,简单来说,就是子类不会去重写覆盖父类成员变量,所以成员变量访问不能方法一样使用多态去访问。

    3.5K40

    为什么改变了对区块链看法

    主要保留意见是,尽管其设计创新,但它并没有解决个人认为重要任何问题。 对区块链怀疑一直持续到几个月前,当时与 Aerospike 一位新客户合作, BSV 协会。...显然,这种保证级别对于核心银行系统等关键环境来说是不够。因此,如果我们打算从关系模型提供数学保证中过渡,我们必须在应用程序层中实施类似的保证。 实现这些保证一种方法是通过 形式化方法。...然而,鉴于核心银行系统复杂性,仅使用这种方法构建一个系统极具挑战性。 区块链潜力 抛开流行语,区块链从根本上来说是一种经过数学证明零信任算法。...在 前一篇文章 中,详细阐述了为什么这种方法非常低效。 通常,这些解决方案采用可扩展数据库,通过复杂数据提取、转换、加载 (ETL) 流程从不可扩展 RDBMS 中检索数据。...没有不断升级复杂性。没有耗时数年、耗资数十亿美元项目来启动一个应用程序。 正是这种愿景改变对区块链看法。

    9610

    java方法参数传递机制

    66); Man.staticswap(a, b); System.out.println(a + "\n" + b); } } 运行结果是 图片 对象 a b ...引用并没有发生改变 下面就说说 java参数传递机制 先说结论:java参数传递并不是引用传递,而是值传递 看下图 图片 swap方法中,a b 向 x y 传递是值,是 a b 在栈中值,此处...传递=拷贝 也就是说,a b 与  x y 除了类型一致外、值相等(指向了堆同一地址),没有任何相同处  a b与x y完完全全不相干 都不相干了,x y 不管这么改变自身值 ,与 a b 有什么关系呢...所以, 方法退出,a b 引用并没有发生变化 再看下一个 改写swap方法, public static void swap(Man m) { m = new Man("xx",88...); } 调用运行 图片 传递是值 传递是值 传递是值

    76200

    辨析Java方法参数中传递和引用传递

    方法大门道 小瓜瓜作为一个Java初学者,今天跟我说她想通过一个Java方法,将外部变量通过参数传递方法中去,进行逻辑处理,方法执行完毕之后,再对修改过变量进行判断处理,代码如下所示。...基本类型:值存放在局部变量表中,无论如何修改只会修改当前栈帧值,方法执行结束对方法外不会做任何改变;此时需要改变外层变量,必须返回主动赋值。...方法参数flg被初始化为外部变量a拷贝,值为false。参数num被初始化为外部变量b拷贝,值为5。 2. 执行方法逻辑,方法局部变量flg被改变为true,局部变量flg被改变为10。...3.方法执行完毕,不再局部变量不再被使用到,等待被GC回收。 结论:当方法参数为基本类型时,是将外部变量值拷贝到局部变量中而进行逻辑处理,故方法不能修改原基本变量。...那么既然是引用拷贝为什么还是没有更改原来包装类型变量值呢?

    1.5K10

    DataTableAcceptChange方法为什么不能在Update之前?

    DataRowRowState状态 重置为Unchanged DataTable.RejectChanges方法:回滚自该表加载以来或者上次调用AcceptChanges以来对该表进行所有更改;并且...DataTable.AcceptChanges方法:提交自上次调用AcceptChanges以来对该表进行所有更改。...DataTable.RejectChanges方法:回滚自该表加载以来或上次调用AcceptChanges以来对该表进行所有更改。...会出现对DataTable进行多次更改,但是通过调用RejectChanges方法拒绝这些更改现象 DataRow.BeginEdit方法:对DataRow对象开始编辑操作。...BeginEdit方法在用户更改数据绑定控件值时被隐式调用;EndEdit方法在您调用DataTable对象 AcceptChanges方法时被隐式调用。

    1.5K10

    如何在Java中使用反射来改变私有变量值?

    Java中,使用反射可以访问和修改类私有变量。反射是一种强大机制,允许我们在运行时检查和操作类、方法和字段等对象信息。...虽然反射是一种强大工具,但它也需要谨慎使用,因为直接操作私有变量可能会破坏类封装性。...下面是一个简单示例代码,展示如何使用反射来改变私有变量值: import java.lang.reflect.Field; public class PrivateFieldModifier {...privateField.set(obj, "修改后私有变量值"); // 打印修改后值 System.out.println("私有变量值:"...接下来,我们调用setAccessible(true)方法设置字段访问权限,以便可以访问和修改私有字段。最后,我们使用set方法修改私有字段值为"修改后私有变量值"。

    14210

    Java中静态方法不能调用非静态方法原因

    如图,是Java中静态代码和实例对象互相调用规则,我们接下来就讲讲为什么Java中静态方法不可以调用非静态代码呢。...因此在对象未存在时非静态方法也不存在,静态方法自然不能调用一个不存在方法。...经过查资料和某人帮助,终于明白啦。 (1)首先,我们可以试一下去掉static,这里不会编译错误,但是运行时会抛出空指针异常,原因是什么呢,原因就是类似于上面说静态方法不能调用非静态方法原因了。...另外补充一下觉得很有必要知道null知识: (1)null可以被强制转换为任何引用类型。 (2)任何含有null值包装类在自动拆箱成基本数据类型时都会抛出一个空指针异常。...(3)不能用一个值为null引用类型变量来调用非静态方法,这样会抛出空指针异常,但是静态方法可以被一个值为null引用类型变量调用而不会抛出空指针异常。

    5.6K50

    Java静态方法不能被子类重写

    参考链接: 可以在Java中重载或重写静态方法Java静态方法不能被子类重写 特点:静态方法属于类方法,也属于对象方法,但是静态方法随类存在。...结论:Java静态方法不能被子类重写,实际上,子类静态方法隐藏了父类静态方法,因此父类子类静态方法同时存在,只不过父类通过类名(或对象名)调用是父类静态方法,子类通过类名(或对象名)调用是子类静态方法...(final,private 方法也如此) (2)静态方法可通过类名直接调用,也可通过类实例化对象调用,因此Father 实例化对象f1调用是父类(不是子类)静态方法。...(3)静态方法绑定时期为代码编译器期,也叫前期绑定。非静态方法属于程序执行期绑定,也就运行期绑定。...        s1.doWork();         System.out.println("---------------");         Father f2= null;   // 创建一个父类变量空引用

    2.2K20

    面试官:告诉为什么static和transient关键字修饰变量不能被序列化?

    一、写在开头在上一篇学习序列化文章中我们提出了这样一个问题:“如果在对象中,有些变量并不想被序列化应该怎么办呢?”...修饰变量值不会被持久化和恢复;而static关键字修饰变量并不属于对象本身,所以也同样不会被序列化!...当时没有解释具体为什么static和transient 关键字修饰变量不能被序列化了,这个问题实际上在很多大厂面试中都可能会被问及。我们今天在这篇中进行解释吧。...然后最后一步defaultWriteFields()方法中,会去调用ObjectStreamClass对象,里面有个方法为getDefaultSerialFields(),提供了可以被序列化属性值。...四、总结好啦,今天针对为什么static和transient关键字修饰变量不能被序列化进行了一个解释,下次大家在面试时候再被问道就可以这样回答啦,不过,还有的BT面试官会问transient关键字修饰变量真的不能被序列化吗

    17320

    java定义全局变量方法_java调用另一个类变量

    大家好,又见面了,是你们朋友全栈君。 “java中全局变量应该放哪儿? ”引发争论 1、单独写一个final类,在里面定义final static全局变量,在其它程序里包含进来就可以了。...4、那JAVA提供FINAL STATIC 干吗用啊,存在即合理,很多情况是需要用到全局变量。他能减少参数传递,能避免重复声明。...java全局变亮也是一样,不能太滥,什么东西都往全局上靠图省事自然会出问题,但是过度恐惧不敢用也不可取,该用场合还是要用.特别是独体类型,全虚拟机只有一份,数据库连接池对象一般就是独体对象,至于原因...至于如何实际应用全局变量看,还是有则去之,无则加冕吧,实在要用偶也么办法(不过自从使用C++/JAVA开始,全局变量使用确实降到了一个极低程度,也许是因为在下代码写还是太少缘故吧,呵呵…...12、static 变量可以使用,不要认为程序中出现了static成员或方法就是程序写不好,用不用静态成员与程序写好坏没有直接因果关系,不要钻牛角尖。

    2.6K20

    为什么要创建一个不能被实例化

    一个不能被初始化类,有什么用? 这就要引入我们今天讨论一种设计模式——混入(Mixins)。 Python 由于多继承原因,可能会出现钻石继承[1]又叫菱形继承。...每个 Mixins 类只有一个或者少数几个方法。不同 Mixin 方法互不重叠。...显然,这样写会报错,因为两个类实例是不能比较大小: 但在现实生活中,当我们说 某人比另一个人大时,实际上是指某人年龄比另一人年龄大。...最后,我们对比一下抽象类(Abstract Class)、接口(Interface)和混入(Mixins)区别: 抽象类: 包含一个或多个抽象方法。 允许包含状态(实例变量)和非抽象方法。...接口: 只能包含抽象方法。 混入: 不能包含状态(实例变量)。 包含一个或多个非抽象方法

    3.4K10

    java全局变量定义和声明_定义全局变量方法

    大家好,又见面了,是你们朋友全栈君。...JAVA全局变量(或称成员变量)可分两种,一种是静态变量,另一种是实例变量,即在类体中定义变量,有三点得注意: 一、成员变量不能在类体中先声明(定义)后赋值,但静态变量可以先在类体中声明,然后在方法中赋值...中全局变量为什么不能先声明再赋值?...那是因为 i=3这是赋值语句,不能单独出现在方法或{}以外地方 改成 public class Test{ int i; {i = 3;} //写在{}里就可以了(这种代码块优先于构造方法执行...(包括成员变量)均不能以这种形式声明并赋值变量(无论在类体中还是在方法 int a=b=3; 译系统认为 b 没有被声明何种数据类型。

    6.3K20

    面试题58(关于Java方法参数传递特性)

    String getName() { return "Child"; } } A Father Father B Father Child C 编译失败 D 以上答案都不对 考点:考察求职者对Java...方法参数传递特性理解 出现频率:★★★★★ 【面试题分析】 因为这两个getName方法是静态方法,所以在内存中地址空间是固定,根本不存在冲突问题。...也就是说,这两个方法在内存中占用了不同空间,而具体执行哪一个,则要看是由哪个类来调用,因为是静态方法,而且两个引用都是Father所以只会调用Father方法。...所以参考答案是 (A) 扩展知识:本题容易混淆,有些读者想当然选择Father Child 输出结果(覆盖),如果是这样结果,代码应进行如下修改 public class Test1 { public

    57750
    领券