精华内容
下载资源
问答
  • java引用类型数据包括数组,接口,等等,当参数引用类型时,“传值”传递的是变量中存放是“引用”,儿不是变量所引用的实体,下面有两个个很好的例子: 例子1: 首先写一个电池类,和收音机类package Example1; ...

    java引用类型数据包括数组,接口,等等,当参数是引用类型时,“传值”传递的是变量中存放是“引用”,儿不是变量所引用的实体,下面有两个个很好的例子:
    例子1:
    首先写一个电池类,和收音机类

    package Example1;
    //电池类
    public class Battery {
        int electicityAmount;
        public Battery(int amount) {
            electicityAmount = amount;
        }
    }
    
    package Example1;
    //收音机类
    public class Radio {
        void openRadio(Battery battery){
            battery.electicityAmount = battery.electicityAmount - 10;
        }
    }
    

    主函数:

    package Example1;
    
    public class Example1 {
        public static void main(String args[]){
            Battery battery = new Battery(100);
            System.out.println("电池的存储电量是:" + battery.electicityAmount);
            Radio radio = new Radio();
            System.out.println("收音机开始使用电池");
            radio.openRadio(battery);
            System.out.println("收音机使用后的电量为:" + battery.electicityAmount);
        }
    }
    

    下面是调试结果:
    电池的存储电量是:100
    收音机开始使用电池
    收音机使用后的电量为:90

    例子2
    Circle类

    package Example2;
    
    public class Circle {
        /**
         * 定义半径,面积
         */
        double radius,area;
        /**
         * 构造方法
         * @param r
         */
        Circle(double r) {
            radius = r;
        }
        /**
         * 修改半径
         * @param r
         */
    
        void setRadius(double r){
            radius = r;
        }
    
        /**
         * 获得半径
         * @return
         */
        double getRadius(){
            return radius;
        }
    
        /**
         * 求面积方法
         */
        double getArea(){
            area = 3.14 * radius * radius;
            return area;
        }
    }
    

    Circular 类

    package Example2;
    
    public class Circular {
        Circle bottom;
        double heght;
        /**
         * 构造方法
         */
        Circular(Circle c,double h) {
            bottom = c;
            heght = h;
        }
        /**
         * 圆锥体积
         * @return
         */
        double getVolme(){
            return bottom.getArea()*heght/3.0;
        }
        /**
         * 获得圆锥底部的半径
         */
        double getBottonRadius(){
            return bottom.getRadius();
        }
        /**
         * 修改圆锥底部的半径
         */
        public void setBottomRadius(double r){
            bottom.setRadius(r);
        }
    }
    

    主函数:

    package Example2;
    
    public class Example {
        public static void main(String args[]){
            Circle circle = new Circle(20);
            System.out.println("main方法中circle的引用" + circle);
            System.out.println("main方法中circle的半径" + circle.getRadius());
            Circular circular = new Circular(circle, 20.0);
            System.out.println("circular圆锥中bottom的引用" + circular.bottom);
            System.out.println("circular圆锥的半径" + circular.getBottonRadius());
            System.out.println("circular圆锥的体积:" + circular.getVolme());
            double r =100;
            System.out.println("圆锥更改底部圆Bottom的半径:" + r);
            circular.setBottomRadius(r);
            System.out.println("圆锥的buttom的半径:" + circular.getBottonRadius());
            System.out.println("圆锥的buttom的体积:" + circular.getVolme());
            System.out.println("main方法中circle的半径:" + circle.getRadius());
            System.out.println("修改后main方法中circle的引用" + circle);
            System.out.println("修改后Circular方法中button的引用" + circular.bottom);
    
        }
    }
    

    调试结果:
    main方法中circle的引用Example2.Circle@659e0bfd
    main方法中circle的半径20.0
    circular圆锥中bottom的引用Example2.Circle@659e0bfd
    circular圆锥的半径20.0
    circular圆锥的体积:8373.333333333334
    圆锥更改底部圆Bottom的半径:100.0
    圆锥的buttom的半径:100.0
    圆锥的buttom的体积:209333.33333333334
    main方法中circle的半径:100.0
    修改后main方法中circle的引用Example2.Circle@659e0bfd
    修改后Circular方法中button的引用Example2.Circle@659e0bfd

    展开全文
  • 当调用方法进行传值时,参数被分配内存空间,并要求调用者向参数传递值。 1.值传递 值传递的数据类型的传值包括八种基本...当参数引用类型时,“传值”传递的是变量中存放的引用。 2.1 对象 public class Test { .

    当调用方法进行传值时,参数被分配内存空间,并要求调用者向参数传递值。

    1.值传递
    值传递的数据类型的传值包括八种基本数据类型
    对于基本数据类型的传值,向该参数传递的值的级别不可以高于该参数的级别。
    在方法调用时,实际参数会将值赋给对应方法的形参,形参在内存空间中被分配存储单元。这样,当形参的值改变时,实际参数不会发生变化

    2.引用传递
    引用数据类型的传值包括数组、对象以及还未学习的接口。
    当参数是引用类型时,“传值”传递的是变量中存放的引用。
    2.1 对象

    public class Test {
     
        public static void main(String[] args) {
            A a = new A(5);
            fun(a);
            System.out.println(a.a);// 输出结果为6
        }
     
        private static void fun(A a) {
            a.a += 1;
        }
     
        static class A {
            public int a;
     
            public A(int a) {
                this.a = a;
            }
        }
    }
    

    引用传递,会改变引用对象的值

    2.2 String类型和数组类型
    String也是引用类型的参数

    public class Example {  
        String str = new String("abc");  
        char[] ch = { 'a', 'b', 'c' };  
        public static void main(String args[]) {  
            Example ex = new Example();  
            ex.change(ex.str, ex.ch);  
            System.out.println(ex.str);  
            System.out.println(ex.ch);  
        }  
        public void change(String str, char ch[]) {
            //ch = new char[]{'a','b','c'};  
            str = "change";  
            ch[0] = 'c';  
        }  
    }  
    

    这个例子的输出为

    abc
    cbc
    

    String:
    我们把str作为参数传入方法后,会新建一个变量,这个变量已经不是原来的变量了,但他们都指向同一个数据区域。所以在方法改变了str指向的数据区域后,即执行“str=“change””,改变的只是形参指向的数据区域,即指向“change”,str仍然指向原来的数据区域。

    数组:
    char类型即为对象类型,是把ch的引用传递进来,即引用传递,这样形参和实参都指向了相同的数据区域,执行“ch[0]=‘c’”后,就会把指向的数据区域中的对应的字符改为’c’,因此会输出“cbc”。若将注释掉的一行代码打开,即执行“ch=new char[]{‘a’,‘b’,‘c’};”这样ch则指向了一个新的数据区域,输出的结果为“abc”。

    下面是本周PTA作业中的一道题目:

    class Number {
        public int i;
        public Number(int ii) {
        i=ii;
        };
    }
    public class Main {
        static void f(Number n) {
            n.i = 9;
        }
        static void g(Integer n) {
            n=9;
        }
        public static void main(String[] args) {
            Number k = new Number(10);
            f(k);
            Integer m = new Integer(10);
            g(m);
            System.out.println(k.i+":"+m);
        }
    }
    

    程序运行后输出的结果是:

    9:10

    由此可见,引用传递时,会改变引用对象的值,如k.i;而在g()方法里,是令m指向了值为9的另一个Integer对象的数据区域,因此并没有改变main方法里变量m指向的数据区域,所以m最后的值仍为10.

    参考:
    1.Java技术——Java中的参数传值方式
    2.java方法参数传递方式–按值传递、引用传递

    展开全文
  • 基本类型参数传值

    2018-12-15 15:39:26
    一 、值传递 测试: 分析: ...引用传值,在函数中不用重新分配一个类型空间,形参其实是实参所在的那个内存空间的别名(另外取得一个名字),对形参的操作也可以认为是对实参的操作; 三 、指针传

    一 、值传递
    测试:
    这里写图片描述

    分析:
    值传递的过程中会给形参分配一个同等类型的内存空间,将实参的内容深拷贝到为该形参分配的内存空间中,后续都是对形参的这块空间进行操作,对实参的内存空间没有影响;

    二 、引用传值
    测试:
    这里写图片描述

    分析:
    引用传值,在函数中不用重新分配一个类型空间形参其实是实参所在的那个内存空间的别名(另外取得一个名字),对形参的操作也可以认为是对实参的操作;

    三 、指针传值
    测试:
    这里写图片描述

    分析:
    指针传值,会给形参分配一个形参类型的指针内存空间,这个指针内存空间里存储的是实参的内存地址,这个形参指向的是实参的那块内存,因此可以利用形参索引到实参的内存对实参进行更改以及获取实参的数据内容,但当形参存储的地址变化后,将失去对实参的索引。

    三种参数传递方式可以总结为:
    这里写图片描述

    指针的三种传递方式也是类似的:
    值传递:
    这里写图片描述

    分配一块指针空间,将实参中存储的地址拷贝到分配的指针空间中,上述赋值是直接改变这块指针空间存储的地址,不会改变实参存储的地址,因此函数运行完不会对名字进行更改。

    引用传递:
    这里写图片描述

    形参中的name和实参中的name共用同一块内存,形参中name存储的地址改变,相应的也就是实参中存储的地址的改变。

    指针传递:
    这里写图片描述

    将实参name的地址赋值给形参的name,即形参name指向的内存块就是实参name内容,因此给形参指向内存块赋值就相当于改变实参name中的地址指向。

    展开全文
  • 引用类型参数传值

    2014-12-18 22:52:05
    参数引用类型时,"传值"传递的是变量的引用而不是变量所引用的实体. 如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化. 两个同类型的引用型变量如果具有同样的引用,就会用同样的实体. class ...
    java的引用型数据包括对象 数组以及接口.当参数是引用类型时,"传值"传递的是变量的引用而不是变量所引用的实体.
    如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化.
    两个同类型的引用型变量如果具有同样的引用,就会用同样的实体.
    class People
    { int money;
      void setMoney(int n)
        { money=n;
        }
    }
     
    class A
    { void f(double y,People p)
        { y=y+1;
          p.setMoney(100);
          System.out.printIn("参数y的值是:"+y);
          System.out.printIn("参数对象p的money是:"+p.money); 
        }
    }
     
    public class Example
    { public static void main(String args[])
      {  double y=0.8;
         People zhang=new People();
         zhang.setMoney(8888);
         A a=new A();
         System.out.printIn("在方法f被调用之前对象zhang的money是:"+zhang.money+"y的值是:"+y);
         a.f(y,zhang);
         System.out.printIn("在方法f被调用之后main方法中y的值仍然是:"+y);
         System.out.printIn("在方法f被调用之后main方法中对象zhang的money是:"+zhang.money);
      }
    }
     
    运行的结果如下:
    在方法f被调用之前对象zhang的money是:8888 y的值是:0.8
    参数y的值是:1.8
    参数对象p的money是:100
    在方法f被调用之后main方法中y的值仍然是:0.8
    在方法f被调用之后main方法中对象zhang的money是100
    展开全文
  • 看例子即可 1、 private void TestMethod(int i) { i = 1; } public void Main() { int i = 0;... // 此时这里的i还是0,因为int是值类型。 } 2、 class TestClass { public i; } private...
  • 【Java笔记】引用类型参数传值

    千次阅读 2017-09-17 15:34:06
    接口当参数引用类型时,“传值”传递的是变量中存放的“引用”,而不是变量所引用的实体。例:Circle.javapublic class Circle { double radius; Circle(double r) //构造函数 { radius=r; } double ...
  • 除了四类八种基本类型外,所有的类型都称为引用类型(如:数组,类,接口,字符串) 值传递 基本数据类型赋值都属于值传递; 值传递传递的是实实在在的变量值,是传递原参数的拷贝,值传递后,实参传递给形...
  • 认识Java 参数传值

    2020-08-12 20:01:40
    在方法中最重要的部分之一就是方法的参数,参数属于局部...引用类型参数传值 Java中的引用型数据包括数组,对象以及接口。当参数是引用类型时,“传值”传递的变量中存放的“引用”,而不是变量所引用的实体。 需要注
  • 1,基本类型传值,传过去的是一个复制品,对方再怎么改,对其原来的参数都没有影响 2,引用类型传值,传递的是内存地址,对方拿着这个值可以随意修改,原来的参数值改变
  • 引用类型参数,ref按引用传值 出处:http://blog.sina.com.cn/s/blog_6edd550601012rj8.html 在C#中,当参数是引用类型并且是以传值的方式传入参数的时候(没有加ref关键字),方法传入的是这个对象的引用的一个...
  • 在C#中,当参数引用类型并且是以传值的方式传入参数的时候(没有加ref关键字),方法传入的是这个对象的引用的一个副本,相当于是以一个引用的值按照传值的方式调用方法,这个引用在方法内部会生成一个副本,就像...
  • java参数传值、传引用

    2015-12-23 09:41:20
    对象类型传递的是引用: 基础数据类型传递的是值,包括int、long、float、double...以及他们的包装类Integer、Long、Float、Double、String...   2、传值和传引用区别: 传值:意味着将一个变量传递给一个函数...
  • 1.对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别。例如,不可以向int型参数传递一个float值,但可以向double型参数传递一个float值。 2.Java的引用型数据包括...参数传值例子.Java publi...
  • 参数传值 在 C++ 中,函数参数的传递有两种方式:传值和传引用。在函数的形参不是引用的情况下,参数传递方式是传值的。传引用的方式要求函数的形参是引用。“传值”是指,函数的形参是实参的一个拷贝,在函数...
  • 1.7 Java参数传值机制

    2020-01-10 16:20:48
    java参数传值机制总述基本数据类型参数的传值引用类型参数的传值示例测试总结 总述       java中,方法中所有参数都是“值传递”,也就是“传递的是值的副本”。也就是说,方法中的是...
  • //指针、引用作为函数参数传值 #include  using namespace std; void SwapVarPoint(int *p1, int *p2); void SwapVarReference(int& r1, int& r2); void main() {  int a=1;  int b=2;  cout ...
  • Java参数传值

    2018-10-12 20:32:37
    基本数据类型参数传值 对于基本类型的参数,向该参数传递的值的级别不可以高于该参数的级别,可以低于该参数的级别。如果传递值的级别比参数的级别低,则传递过程中会自动转化。 引用类型参数的传值 这里先普及一下...
  • 例子:Status Name (Triplet &T , ElemType *v1 , ElemType v2 , ElemType v3) ...解释:在调用此函数时,把第一个实参的地址就给了形参T,故在此函数中对T的操作就等同于对原参数的操作。第二个实参是一个
  • 4.5 参数传值

    2017-11-24 13:44:42
    4.5 参数传值 4.5.1 传值机制 在Java中,方法的所有参数都是传值的,也就是说,方法中参数变量的值是调用者指定的值的拷贝 ...对于基本数据类型的参数,向该参数传递的值的级别不可以...//基本数据类型参数传值 p
  • 参数传值机制

    2020-12-14 17:45:33
    引用类型参数传值 传递的是值的副本。但是引用类型指的是“对象的地址”。因此,副本和原参数都指向了同一个“地址”,改变“副本指向地址对象的值,也意味着原参数指向对象的值也发生了改变”。 ...
  • 引用类型参数传值:当参数是引用类型时(数组、对象、接口),“传值”传递的变量引用的实体,而是变量中存在的“引用”。 ** java中的get是取值的方法,set是设置值的方法,比如对于一个name属性,getName就是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,703
精华内容 19,881
关键字:

引用类型参数的传值