(转)java 中的 传值 与 传址

在一些面试企业的过程当中 ,很多人看重于基础的考核。其中,传值与传地址 就是一种基础能力考核的关键,这里我总结了 5种很典型的例子 ,最后做了一个总结

  • 首先是8种基本数据类型 下面用 int 类型 做例子 属于传值
public static void method1(int i)
    {

        i= i+10;
        System.out.println("在方法内的值"+i);
    }
public static void main(String[] args) {
        int i =5;
        method1(i);
        System.out.println("调用之后的值"+i);
    }

调用结果如下 
在方法内的值15 
调用之后的值5

  • 接下来是一个比较特殊的类型 引用数据类型

Integer Long Boolean Byte Character Double Float Short 
这几种数据类型 也是传地址 但是它比较特殊 可以理解为“传值”

public static void method2(Float i)
    {

        i= i+10;
        System.out.println("在方法内的值"+i);
    }
public static void main(String[] args) {

        Float i =1.11f;
        method2(i);
        System.out.println("调用之后的值"+i);
        }

调用结果如下 
在方法内的值11.11 
调用之后的值1.11

  • 下面又是一个比较特殊的 字符串常量 String
public static void method3(String i)
    {

        i= i+"world";
        System.out.println("在方法内的值    "+i);
    }

public static void main(String[] args) {

        String a ="你好";
        method3(a);
        System.out.println("调用之后的值   "+a);
    }

调用结果如下 
在方法内的值 你好world 
调用之后的值 你好

  • 下面一个是数组 传址
public static void method4(String[] i)
    {

        i[0]="三";
    }
public static void main(String[] args) {
        String [] a = new String[2];
        a[0]="一";       a[1]="二";

        for(int j = 0; j < a.length; j++){
            System.out.print(a[j] + "  ");
        }
        method4(a);
        System.out.println( "  ");

        for(int j = 0; j < a.length; j++){
            System.out.print(a[j] + "  ");
        }
    }

调用结果如下 
一 二 
三 二

最后一个 也是我们应用最多的一个 就是 对象 传址

public class Demo {

    public int ii =0;

    public Demo(int ii) {

        this.ii =ii;
    }

}
public static void method5(Demo i)
    {
        i.ii+=10;
    }
public static void main(String[] args) {
        Demo deo = new Demo(6);
        method5(deo);
        System.out.println("调用之后的值   "+deo.ii);

}

调用结果如下 
调用之后的值 16

传值 传的是基本类型 通过参数传递给方法, 传的是值的拷贝 
所以 函数体内的值的变化,不会影响函数体外的值

如果传入的是解百纳类型包装类的引用,传的仍然是值的拷贝

传地址 传入的是对象的引用,通过参数传给方法,传的是地址的拷贝 
如果在函数体内,改变传入地址所指向的对象数据,会影响函数体外的对象。这个事情可以这么去理解 ,我把地址的内存 传给了方法 方法改变了内存中的内容,所以指向它的引用的值 自然都会改变。

时间: 2024-10-23 01:28:47

(转)java 中的 传值 与 传址的相关文章

Java中的传值与传引用

曾经对java中传值还是传引用的问题十分困惑,而且也被问到过许多次,无论是面试,还是平时我们平时的讨论中. 在stackoverflow上面浏览时,无意中发现了跟这个问题有关的论题,于是深入地查看了,感觉获益匪浅,于是结合自己过去的经验,写了这篇博客跟大家分享. 以前我觉得是这样的,java中的基本数据类型和String是传值的,而其它的类类型的数据则是传引用的.不过现在我觉得不是这样的. *****************************************************

Java 中的传值与传引用

Java 函数中的传值和传引用问题一直是个比较"邪门"的问题,其实 Java 函数中的参数都是传递值的,所不同的是对于基本数据类型传递的是参数的一份拷贝,对于类类型传递的是该类参数的引用的拷贝,当在函数体中修改参数值时,无论是基本类型的参数还是引用类型的参数,修改的只是该参数的拷贝,不影响函数实参的值,如果修改的是引用类型的成员值,则该实参引用的成员值是可以改变的,例子如下 class Model { public int i = 0; public String s = "

Java传值和传址

调用函数时,传的参数过去可能是传值,也可能是传址.如果是传值,函数内部的操作对参数的值没有影响:如果是传址,函数内部的操作是对参数指向的内存进行操作,会影响参数的值. Java到底是传值还是传址?用下面这个例子可以实验一下: package test; import java.util.ArrayList; import java.util.List; public class ValueAndAddress { public static void f1(int x){ x = x + 5;

他山之石,calling by share——python中既不是传址也不是传值

事情是这样的,Python里是传址还是传值令人疑惑,限于本人没有C基础,所以对大家的各类水平层次不一的解答难以确信. 第一个阶段: 在读<python基础教程第二版>的时候感到疑惑,然后群友解答(略敷衍),接着就是知乎上提问(感谢大家的热心回答,但我很晚才收到推送) 虽然是某天早晨睡不着,翻看公众号的时候看见一篇<不要再问 "Python 函数中,参数是传值,还是传引用?" 这种没有意义的问题了>的文章,初步释疑惑(但后来我觉得他的说法虽然形象,但是不准确) 第

javascript的变量,传值和传址,参数之间关系

先把收获晾一下: 1.javascrip变量包含两种类型的值,一种为引用类型的值,一种是基本类型的值.引用类型包括:Array,Object,Function(可以这么理解,非基本类型的都是引用类型);5种基本类型包括:undefined,null,string,boolean,number 2.函数的参数的传递的机制是复制变量值. 书上说:”把函数外部的值复制给函数内部的参数,就和把值从一个变量复制给另一个变量一样.基本类型的传递如同基本类型变量的复制一样,而引用类型的则如同引用类型变量的复制

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用 传值 把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 传地址 传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和行参都指向同一个对象 传引用 真正的以地址的方式传递参数 传递以后,行参和实参都是同一个对象,只是他们名字不同而已 对行参的修改将影响实参的值 所谓变量是内存地址的一个抽象名字,在静态编译的程序中,所有变量名都会在编译时转换成内存地址,机器不知道变量名,只知道地址. C 语

php传值与传址的区别

PHP中传值和传址的区别, 十分的简单, 看字面的意思大概就知道是什么意思了, 下面通过简单的实例看一下两者的区别. 1 $a = 5; 2 function show(&$b) { 3 $b += 10; 4 echo "函数内部:" . $b . "<hr>";//结果: 15 5 } 6 show($a); 7 echo "函数外部:" . $a . "<hr>";//结果: 15 总结:

JS 基础知识2 传值和传址

要知道传址跟传址,首先我们先了解下数据值的操作. 1复制:可以把它赋值给一个新的变量 2传递:可以将他传递给一个函数或者方法 3比较:可以与另外一个值比较,判断是否相等 简要介绍下传值: 当一个数据是通过值被操作的,那么关系到的是数据的值,在赋值的过程中,是对实际值进行了COPY,储存在一个变量或者属性或数组中,copy的值与原数据是相互独立的. 当数据通过值传递给一个函数时,数据的一份传递给这个函数,如果函数体修改了这个值,只在函数体受影响,函数外的原数据不受影响. 当一个数据通过值和另外一个

javascript . 05 json的组成、for...in 遍历对象、简单数据类型与复杂数据类型的传值与传址、内置对象

对象字面量  JSON var obj = { aaa :999}; var json={"aaa":999,"bbb":888}; "kay":value 对象字面2??定义方法和json很像,只有一点不同,json的key 必须加"" : 对象,数组也可以作为键值 JSON的组成 Javascript Object Notation 对象字面量的一种表现形式 : 键名必须有双引号""包围 : 为什么用J