java中的参数传递

原创 2006年05月17日 17:16:00

Java中的传递参数分为两种:一种是基本类型参数的传递,另外一种就是对象的传递.

 

       对于基本类型的传递,我们先看一个例子:

package com.king.chat.test;

 

public class ParamTest {

    public static void changeInt(int i){

       i = i+1 ;

       System.out.println(i);

    }

    public static void main(String[] argc) {

       int k= 10 ;

       System.out.println(k);

       changeInt(k);

       System.out.println(k);

    }

}

这个例子的输出结果是 10

                  11

                  10

通过结果显而易见在调用函数changeInt()的时候没有对传入的参数进行任何的改变,您可以试一试其他的基本类型,结果也是一样的.

所以,java,对基本类型参数的传递采取的是开辟一块新的内存(作用域就是这个方法),然后把原来的变量的值赋值给该内存. 所以我们在changeInt()函数中的更改无非是对新的内存上的数据的更改。(我提倡的是java中的参数传递都是传值操作,这里传的是内存中的数据)

(可以举个例子: 有一对双胞胎兄弟 ,有一天需要哥哥去当兵,但是因为某个原因,真正被送走的是卵生弟弟,而弟弟在当兵过程中所经历的并没有发生在哥哥身上)

基本类型实参和形参之间的关系:

Id       Addr        Value       state

K        0x00001      10        1

I        0x00005      10        2

这里我们处理的只是Value

 

对于对象的传递,我认为传的也是值,只是这个值是一个引用的值(类似C语言中的传值和传地址,其实都是传值,不同的只是一个是*p ,一个是p)

我们java程序员控制对象的时候操作的是对象的引用,引用中存放着一个值,通过这个值你可以找的到它所指向的对象的位置。对象和引用不一样,引用是固定大小的,类似C中的指针变量,用来指定对象的位置,而对象需要分配的地址空间和其的属性有关,当然了,如果包含一个对象A属性的话,对象里面存放的也只是该属性A的引用而已。现在让我们看另外一个例子:

package com.king.chat.test;

 

public class ObjectParamTest {

    private int id ;

    private String name ;

    public ObjectParamTest(int id ,String name)

    {

       this.id    = id ;

       this.name  = name ;

    }

    public void getId() {

       System.out.println(id);

    }

    public void setId(int id) {

       this.id = id;

    }

    public void getName() {

       System.out.println(name);

    }

    public void setName(String name) {

       this.name = name;

    }

    public String toString(){

      

       return "id=" + id +",name=" +name ;

    }

   

    public static void ChangeObj1(ObjectParamTest o){

       o.setId(20);  //更改的是引用的值

       o.setName("zazaking"); //更改的是引用的值

       System.out.println(o);

    }

   

    public static void ChangeObj2(ObjectParamTest o){      

       o = new ObjectParamTest(100 ,"guest");//更改了引用的地址

    }

    public static void main(String[] argc){

       ObjectParamTest o = new ObjectParamTest(10 ,"king");

       System.out.println(o);

       ChangeObj1(o);

       System.out.println(o);

       ChangeObj2(o);

       System.out.println(o);

    }

}

 

这个例子输出的结果是 id=10,name=king

id=20,name=zazaking

id=20,name=zazaking

id=20,name=zazaking

这个例子分为两部分,第一部分是对对象内部的属性的改变,第二部分是对整体对象的改变

前面我们已经说过,java中真正对对象的操作,首先得通过指向它得引用中的值

对象的实参和行参的对照:

Id       Addr        Value       state

实参  K        0x00001      0x11111     1

行参  I        0x00005      0x11111     2

 

从上表中可以发现传递了对象时,实参和行参虽然占用着不同的内存,但是他们的Value通过值传递被赋予了相同的值,所以通过Value所指向的Object也是同一个, 当然了,我们对行参I的操作有两种,一种就是直接对Addr的赋值(代码的第二部分),另一种是对Value的操作(代码的第一部分)

举例:

 有两兄弟,没有结婚前他们和父母一起拥有着一个共同的家,有一天,弟弟说自己家里安了电话,其实也就代表了哥哥家里安了电话,结果是一样的.(第一部分) ,哪天哥哥结婚了,有了一个自己的家,这时候,哥哥的家和弟弟的家指向的就不是同一个了,忽然有一天哥哥哭丧了个脸说家里被盗了,当然不可能代表弟弟的家也被盗了.

 

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

通过前一篇文章的介绍,我们从整体上明白了,Java类中变量的差异性、不同变量在内存中的存储位置,以及变量的生命周期等。今天,我们来看一下Java中参数传递的机制。 形参:方法声明时包含的参数声明 ...
  • liu765023051
  • liu765023051
  • 2015年08月11日 16:02
  • 5885

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

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

Java学习笔记 --- Java中的参数传递问题

前言这学期学校开了Java, 所以服务器组的小伙伴们都开心地写起了Java. 昨天晚上萌萌哒的校园问了我一个问题, 在C语言中参数的传递中, 我们可以使用指针进行传递, 从而更改参数的值, 可是在Ja...
  • dela_
  • dela_
  • 2017年09月24日 10:46
  • 179

Java中的参数传递问题和图解

基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量会随之消失, 引用数据类型的值传递,改变原值,因为即使方法弹栈,但是对内存数组对象还在,可以通过地址继续访问。 Java中到底是传值还是传...
  • zhoupeng12345
  • zhoupeng12345
  • 2017年07月16日 14:19
  • 118

Java方法中的参数传递方式

在Java语言中,参数传递时,一般存在两种参数传递的规则 1.按值传递(by value) 使用该方式传递的参数,参数原始的值不发生变化 适用范围:八种基本数据类型和...
  • u011499992
  • u011499992
  • 2015年08月04日 19:11
  • 1491

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

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

我的Java开发学习之旅------>Java String对象作为参数传递的问题解惑

又是一道面试题,来测试你的Java基础是否牢固。 题目:以下代码的运行结果是? public class TestValue { public static void test(String...
  • qq446282412
  • qq446282412
  • 2015年06月16日 19:45
  • 1424

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

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

JAVA中方法的参数是按值传递的,有个例子很经典

看《Java编程思想(第四版)》到字符串部分了。之前有部分章节没有写读书笔记,因为这一两个月由于种种原因有所耽搁,想赶赶时间,况且有些内容比较熟悉,觉得没太必要现在立即就写读书笔记,以后有时间再补吧。...
  • theside
  • theside
  • 2008年03月20日 21:52
  • 561

Java传递基本类型:值传递,对象作为参数:引用传递

值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。 引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相...
  • dreamxiaowei
  • dreamxiaowei
  • 2017年02月25日 15:53
  • 3261
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中的参数传递
举报原因:
原因补充:

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