zoukankan      html  css  js  c++  java
  • Java参数传递,值传递

    问题:Java 中参数的传递是以什么方式传递的?

    回答:

    1. Java中参数类型传递都是值传递
    2. 基本数据类型的值传递采用先对值进行拷贝再传递
    3. 对象类型的值传递传递的是对象的地址
    4. String 虽然是对象类型,但是它的参数传递方式和基本数据类型相同

    1. 基本数据类型先对值进行拷贝再传递

    
    public class ParameterPassingTest {
        public void function1(int a){
            a = 10;
        }
        public void function2(Dog dog){
            dog.setName("paul");
        }
        public void function3(String str){
            str = "changed";
        }
    }

    调用 function1() 查看当为基本数据类型的引用赋值时的变化:

    System.out.println("++++++++++++++++++++");
    System.out.println("a:" + a);
    passing.function1(1);
    System.out.println("a:" + a);
    System.out.println("++++++++++++++++++++");
    
    ++++++++++++++++++++
    a:11
    a:11
    ++++++++++++++++++++

    a 的值不变,说明对基本类型的引用赋值不改变原来的值

    2. 对象类型传递对象的地址

    public class Dog {
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

    调用 function2() 查看当为对象类型的引用赋值时的变化:

    System.out.println("++++++++++++++++++++");
    Dog dog = new Dog();
    dog.setName("Mike");
    System.out.println("Dog:" + dog.getName());
    passing.function2(dog);
    System.out.println("Dog:" + dog.getName());
    System.out.println("++++++++++++++++++++");
    ++++++++++++++++++++
    Dog:Mike
    Dog:paul
    ++++++++++++++++++++

    name 改变:说明引用拿到了对象的地址,并通过地址对其值直接进行修改

    3. String 类型是特例

    System.out.println("++++++++++++++++++++");
    String str = "abc";
    System.out.println("str:" + str);
    passing.function3(str);
    System.out.println("str:" + str);
    System.out.println("++++++++++++++++++++");
    

    “`
    ++++++++++++++++++++
    str:abc
    str:abc
    ++++++++++++++++++++
    ““
    String 虽然是对象类型,但是其值传递结果和基本数据类型一样。

    4. 例题

    这里写图片描述

    这里写图片描述

  • 相关阅读:
    整数
    mysql-5.7.13-win32 安装
    Flex air修改外部xml文件 (转)
    JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址
    C#中&和&&的区别
    百度UEditor1.4.3编辑器和asp.net MVC 5结合
    ASP.NET MVC ajax数组,模型绑定问题。
    MEF依赖注入无法在在构造函数中使用的解决办法
    AJaxFileUpload 文件上传<pre>,json字符串为空解决方法
    C#中字符串转换为IPAdress
  • 原文地址:https://www.cnblogs.com/shuiyj/p/13185222.html
Copyright © 2011-2022 走看看