如何理解java的值传递?

news/2025/2/26 4:58:00

1、基本数据类型(值传递

java中的基本数据类型可以在栈(stack)中直接分配内存,它有以下八种:

booleanbytecharshortintlongfloatdouble

2、引用数据类型(址传递引用传递

除了基本数据类型外,他们的对象的引用在栈(stack)中,对象实际存放在堆(heap)中,实际上是将对象的地址赋值了过去。

3、特殊类型(效果等同于值传递

String类型、Integer类型等,这些类型保存数据的变量是final类型,只要牵涉到数据变更,都需要返回一个新建的对象,但原来的对象的数据并不会变更,效果等同于值传递。

测试代码

package org.goodStudy.test;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.HashMap;

/**
 * @Author dingws
 * @PackageName JavaStudy
 * @Package org.goodStudy.test
 * @Date 2023/1/5 16:35
 * @Version 1.0
 */
public class testPassParam {

    @Data
    static class MyClass {
        private Integer aa = 00;
    }

    static void changIntegerValue(Integer param){
        param = 1;
    }

    static void changStringValue(String param){
        param = "xyz";
    }

    static void changClassValue(MyClass param){
        param.setAa(11);
    }

    static void changMapValue(HashMap param){
        param.put("0", "xyz");
    }

    static void changArrayValue(char[] param){
        param[0] = 'x';
        param[1] = 'y';
        param[2] = 'z';
    }

    static void changCharValue(char param) {
        param = 'x';
    }

    public static void main(String[] args) {
        Integer a = new Integer(0);
        System.out.println("a = " + a);
        changIntegerValue(a);
        System.out.println("after chang value --- a = " + a);

        String b = "abc";
        System.out.println("b = " + b);
        changStringValue(b);
        System.out.println("after chang value --- b = " + b);

        String c = new String("abc");
        System.out.println("c = " + c);
        changStringValue(b);
        System.out.println("after chang value --- c = " + c);

        HashMap d = new HashMap();
        d.put("0", "abc");
        System.out.println("d = " + d);
        changMapValue(d);
        System.out.println("after chang value --- d = " + d);

        char[] e = new char[]{'a', 'b', 'c'};
        System.out.println("e = " + e[0] + e[1] + e[2]);
        changArrayValue(e);
        System.out.println("after chang value --- e = " + e[0] + e[1] + e[2]);

        char f = 'a';
        System.out.println("f = " + f);
        changCharValue(f);
        System.out.println("after chang value --- f = " + f);

        MyClass myClass = new MyClass();
        System.out.println("myClass = " + myClass);
        changClassValue(myClass);
        System.out.println("after chang value --- myClass = " + myClass);
    }
}

上面代码输出结果:

a = 0
after chang value --- a = 0
b = abc
after chang value --- b = abc
c = abc
after chang value --- c = abc
d = {0=abc}
after chang value --- d = {0=xyz}
e = abc
after chang value --- e = xyz
f = a
after chang value --- f = a
myClass = testPassParam.MyClass(aa=0)
after chang value --- myClass = testPassParam.MyClass(aa=11)


http://www.niftyadmin.cn/n/3656046.html

相关文章

GOOGLE地球浏览器分析(七):开发人员讲述的Google Earth真正工作原理

GOOGLE地球浏览器分析(七):开发人员讲述的Google Earth真正工作原理粟卫民http://www.gisdev.cn/ http://blog.csdn.net/suen/ 日期:2007-07-09转载:http://www.realityprime.com/articles/how-google-earth-really-wo…

基于.NET 2.0的GIS开源项目SharpMap分析手记(十二):SharpMap WMS服务及其Openlayers访问

基于.NET 2.0的GIS开源项目SharpMap分析手记(十二):SharpMap WMS服务及其Openlayers访问粟卫民 http://www.gisdev.cn/ http://blog.csdn.net/suen/ 日期:2007-7-12保留所有版权。如需转载,请联系作者,并在…

GOOGLE地球浏览器分析(五):KML文件基本格式

GOOGLE地球浏览器分析(五):KML文件基本格式粟卫民http://www.gisdev.cn/ http://blog.csdn.net/suen/ 日期:2007-7-5保留所有版权。如需转载,请联系作者,并在醒目位置注明出处第三节我们介绍了KML文件的定义…

GOOGLE地球浏览器分析(六):AJAX支持的GOOGLE地图MASHUP教程

GOOGLE地球浏览器分析(六):AJAX支持的GOOGLE地图MASHUP教程粟卫民http://www.gisdev.cn/ http://blog.csdn.net/suen/ 日期:2007-06-12转载:http://dev2dev.bea.com.cn/techdoc/2007/06/java-soa-google-mashups.html …

基于.NET 2.0的GIS开源项目SharpMap分析手记(十):开源空间信息软件体系与技术概述

基于.NET 2.0的GIS开源项目SharpMap分析手记(十):开源空间信息软件体系与技术概述粟卫民 http://www.gisdev.cn/ http://blog.csdn.net/suen/ 日期:2007-6-15转载自:西陆星 http://www.cngis.org/bbs/showthread.php?…

基于.NET 2.0的GIS开源项目SharpMap分析手记(十一):SharpMap影像准备——基于ERDAS的GEOTIFF图像生产过程

基于.NET 2.0的GIS开源项目SharpMap分析手记(十一):SharpMap影像准备——基于ERDAS的GEOTIFF图像生产过程粟卫民 http://www.gisdev.cn/ http://blog.csdn.net/suen/ 日期:2007-7-5保留所有版权。如需转载,请联系作者&…

基于.NET 2.0的GIS开源项目SharpMap分析手记(八):怎样对SharpMap进行扩展开发——从许可角度来谈

基于.NET 2.0的GIS开源项目SharpMap分析手记(八):怎样对SharpMap进行扩展开发——从许可角度来谈粟卫民 http://www.gisdev.cn/ http://blog.csdn.net/suen/ 日期:2007-6-9保留所有版权。如需转载,请联系作者&#xff…

基于.NET 2.0的GIS开源项目SharpMap分析手记(九):SharpMap中Styles和Geometries名称空间下有关类的分析

基于.NET 2.0的GIS开源项目SharpMap分析手记(九):SharpMap中Styles和Geometries名称空间下有关类的分析粟卫民 http://www.gisdev.cn/ http://blog.csdn.net/suen/ 日期:2007-6-15转载自:心帆http://group.qq.com/grou…