Java方法中通过传递参数改变变量的值

转载 2017年09月11日 17:46:28

刚在写一个用例,需要在方法中改变传递的参数的值,可是java中只有传值调用,没有传址调用。所以在java方法中改变参数的值是行不通的。但是可以改变引用变量的属性值。

可以仔细理解一下下面几句话:

1、对于基本类型参数,在方法体内对参数进行重新赋值,并不会改变原有变量的值。

2、对于引用类型参数,在方法体内对参数进行重新赋予引用,并不会改变原有变量所持有的引用。 

3、方法体内对参数进行运算,不影响原有变量的值。 

4、方法体内对参数所指向对象的属性进行操作,将改变原有变量所指向对象的属性值。 

也就是说,对于基本数据类型,实现的是传值,只是个形参,不会改变原有值。对于引用数据类型,对这个引用进行操作,其实也是相当于对形参的操作,不会改变原来的引用。但是,当对这个引用的属性进行操作的时候,相当于CPP中的传址调用,可以改变这个引用的属性的值。

举个例子:

public class Main {  
  
    private static void getMiddleOne(boolean b, Boolean boo, Boolean[] arr){  
        b = true;  //形参,不会改变原有值  
        boo = new Boolean(true);  //引用变量的直接操作相当于值传递,不会改变原来的引用变量  
        arr[0] = true;  //引用变量的属性的操作,会改变原有引用的属性,相当于传址调用  
    }  
      
    //测试  
    public static void main(String[] args) {  
        boolean b = false;  
        Boolean boo = new Boolean(false);  
        Boolean[] arr = new Boolean[]{false};  
  
        getMiddleOne(b, boo, arr);  
          
        System.out.println(b);    
        System.out.println(boo.toString());  
        System.out.println(arr[0]);  
  
        /** 
         * output: 
         *      false 
         *      false 
         *      true 
         */  
    }  
}  


当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?...
  • u012726702
  • u012726702
  • 2017年05月16日 11:18
  • 3796

Java变量之间传值- 值传递还是引用传递的讨论

Java变量之间传值时可分为值传递和引用传递, 那么它们有何区别?   1. 简单类型是按值传递的     Java 方法的参数是简单类型的时候,是按值传递的(pass by val...
  • matricer
  • matricer
  • 2016年09月17日 20:01
  • 1669

在java方法中改变传递的参数的值

刚在写一个用例,需要在方法中改变传递的参数的值,可是java中只有传值调用,没有传址调用。所以在java方法中改变参数的值是行不通的。但是可以改变引用变量的属性值。 可以仔细理解一下下面几句话: ...
  • sinat_22013331
  • sinat_22013331
  • 2016年04月14日 12:04
  • 9204

Java的方法的参数传递,值传递和引用传递还有String字符串传递

方法的参数传递 1、值传递  a) 方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。传到方法里的参数类型是基本数据类型的都叫值传递 2、引用传递 ...
  • wolf09311
  • wolf09311
  • 2014年11月11日 14:35
  • 4689

Java只有一种参数传递机制------按值传递

Java中并没有传递引用这一说,只有一种参数传递机制,就是按值传递 首先,最主要要强调的一点就是,Java 应用程序有且仅有的一种参数传递机制,并没有传递引用这一说。造成这一误解,主要是因为有这么...
  • zlf4896
  • zlf4896
  • 2016年03月15日 17:42
  • 443

Java的参数传递到底是引用传递还是值传递

首先看一段代码:public static void main(String[] args) { Person a = new Person(23, "a"); Person b = ...
  • panyongcsd
  • panyongcsd
  • 2016年08月30日 17:14
  • 1844

JAVA 方法的参数是按值传递还是引用传递?

JAVA 方法的参数是按值传递还是引用传递?
  • xinnian468153
  • xinnian468153
  • 2016年08月21日 09:33
  • 415

directive的传值问题(全面解析directive的传值问题)微信分享实例

(一)开发人员可以使用directive自定义angularjs的指令,定义指令的类型有"A"、"E"、"C"、"EAC",这个过程比较简单,就不加说明了,当你定义好指令之后,问题来了,你怎么把htm...
  • ILV_XJ
  • ILV_XJ
  • 2017年05月09日 18:21
  • 864

重新理解Java -- 类型、值、对象、参数传递

Java的类型、值、对象以及值传递,常常是众多面试官喜欢混淆的概念之一。自以为有清晰了解的童鞋们,也常常在面试官的妖言之下就迷失方向,而笔者就是其中一个。为此,笔者翻看了The Java Langua...
  • Memono
  • Memono
  • 2014年03月24日 17:21
  • 1487

Java基础(五)Java中的参数传递机制

通过前一篇文章的介绍,我们从整体上明白了,Java类中变量的差异性、不同变量在内存中的存储位置,以及变量的生命周期等。今天,我们来看一下Java中参数传递的机制。 形参:方法声明时包含的参数声明 ...
  • liu765023051
  • liu765023051
  • 2015年08月11日 16:02
  • 5390
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java方法中通过传递参数改变变量的值
举报原因:
原因补充:

(最多只允许输入30个字)