博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...
阅读量:7056 次
发布时间:2019-06-28

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

《》

《》

原理知识:

如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的 值不会改变原始的值.

如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的 值,那么在函数内的改变会影响到传入的参数。

如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的 地址,所以不会改变参数的值。


String和包装类是什么类型传递这个问题,可能很多人都没有去细想过,下面我就给点我自己的见解。

public class Test {    public static void test1(Integer num){        num = new Integer(5);    }    public static void test2(String str){        str.replace("1", "4");    }    public static void main(String[] args) {        Integer num = new Integer(1);        test1(num);        // 输出结果为1        System.out.println(num.intValue());        String str = new String("123");        test2(str);        // 输出结果为123        System.out.println(str);    }}
分析:    上述程序很容易让人误以为String类型和包装类型是值传递。其实我们认真想一下:    String类型和包装类型都是对象类型,所以必然是引用传递。    但是由于String类和包装类都没有提供value对应的setter方法,我们无法改变其内容,所以导致我们看起来好像是值传递。
基本类型的数组对象,可以作为载体带回返回值
package com.dfs.util;public class Test5 {    public static void main(String[] args) {        int[] a = {1,2,3};        test(a);        for(int item : a) {            System.out.println(item);        }    }        private static void test(int[] a) {        a[1] = 100;    }}

结果:

11003

 

 

转载地址:http://ixool.baihongyu.com/

你可能感兴趣的文章
自己实现几个基本函数
查看>>
谨防沦为DLL后门木马及其变种的肉鸡
查看>>
C#构造函数的重载
查看>>
Silverlight4.0教程之轻松操作剪切板
查看>>
GIF, JPEG和PNG
查看>>
线控的原理
查看>>
Android : Must Override a Superclass Method
查看>>
24款最好的jQuery日期时间选择器插件
查看>>
记2016腾讯 TST 校招面试经历,电面、笔试写代码、技术面、hr面,共5轮
查看>>
我是一个线程(转)
查看>>
MS access 数据定时导入MS SQL Server
查看>>
php 生成8位数唯一的激活码
查看>>
微信公众平台完整开发教程【转】
查看>>
初学JDBC,最简单示例
查看>>
strftime 日期时间格式化
查看>>
exe4j的使用
查看>>
Java单链表、双端链表、有序链表实现
查看>>
hadoop配置
查看>>
031 分布式中,zookeeper的部署
查看>>
persits.jpeg 水印组件
查看>>