博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 值传递 数组传递
阅读量:6219 次
发布时间:2019-06-21

本文共 1975 字,大约阅读时间需要 6 分钟。

hot3.png

public class Test {    String str = new String("good");    char[] ch = {'a','b','c'};    int i = 10;    public void change(String str,char[] ch,int i){        str = "test ok";   //=new String("test ok")        ch[0] = 'g';        i++;    }    public static void main(String[] args){        Test tt = new Test();        System.out.println(tt.i);        System.out.println(tt.str);        System.out.println(tt.ch);        System.out.println("------------");        tt.change(tt.str,tt.ch,tt.i);        System.out.println(tt.i);        System.out.println(tt.str);        System.out.println(tt.ch);    }}10goodabc------------10goodgbc   #此处a->g

str是String类型的引用;i是基本类型变量;ch是数组名,也是数组对象的引用

在change()方法里,str="test ok",是一个新的对象把首地址放在引用变量str上;而ch[0]='g';因为传的是数组的引用,而此时ch[0]='g';是对数组元素的操作,能修改源数组的内容;
i是整型值,只是把值copy了一份给方法,在方法的变化是不改变的源i的。
如果将单个基本类型数组的元素传递给方法,并在方法中对 其进行修改,则在被调用方法结束执行时,该元素中存储的并不是修改后的值,因为这种元素是按值传递,如果传递的是数组的引用,则对数组元素的后续修改可以 在原始数组中反映出来

package com.lifeibigdata.algorithms.blog;/** * Created by lifei on 16/6/22. */public class Test {    String str = new String("good");    char[] ch = {'a','b','c'};    int i = 10;    public void change(String str,char ch,int i){  //change()方法里的入参char[] ch变成--------------char ch        str = "test ok";        ch = 'g';        this.i = i+1;                               //this.i = i+1;这里面等号左边的i是属性i,等号右边的i是局部变量(入参里的i)    }    public static void main(String[] args){        Test tt = new Test();        System.out.println(tt.i);        System.out.println(tt.str);        System.out.println(tt.ch);        System.out.println("------------");        tt.change(tt.str,tt.ch[0],tt.i);            //这次传递的是个char值的单个数组元素,按照上面的解析        System.out.println(tt.i);        System.out.println(tt.str);        System.out.println(tt.ch);    }}10goodabc------------11goodabc

在Java中对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数;这时对象和参数中指向是同一个地址,数据共同变化,如果在这个过程中,如果改变了参数中保存的地址,那么对象和参数不再指向同一个地址,如果此时改变参数中地址指向的值,那么对象中的参数将不会改变

转载于:https://my.oschina.net/datacube/blog/699404

你可能感兴趣的文章
centos7 修改sudoers文件
查看>>
Flask-SQLAlchemy获取一个字段里去掉重复的数据
查看>>
Python编写API接口
查看>>
[Json.net]忽略不需要的字段
查看>>
前端学HTTP之内容协商
查看>>
DiskLrucCache使用Demo(强烈推荐,非常好用)
查看>>
python编程(python开发的三种运行模式)【转】
查看>>
第四章 Spring.Net 如何管理您的类___对象、对象工厂和应用程序上下文
查看>>
navicat for mysql只导出数据表结构(转)
查看>>
C语言学习笔记 (001) - 常量指针与指针常量的区别(转帖)
查看>>
【IntelliJ Idea】idea下hibernate反向生成工具,根据数据表生成实体
查看>>
scala中隐式转换之隐式值和隐式视图
查看>>
Java 实例
查看>>
weblogic多池与oracle集群RAC
查看>>
php类库安装xml simplexml
查看>>
Asp.Net SignalR Hub集线器
查看>>
关于集成抽取进程重启后的现象分析
查看>>
56.如何清除已经设置的npm config配置
查看>>
028——VUE中事件修饰符once
查看>>
FineUIPro v5.1.0 发布了!
查看>>