精华内容
下载资源
问答
  • Java参数传值

    2018-10-12 20:32:37
    基本数据类型参数传值 对于基本类型的参数,向该参数传递的值的级别不可以高于该参数的级别,可以低于该参数的级别。如果传递值的级别比参数的级别低,则传递过程中会自动转化。 引用类型参数的传值 这里先普及一下...

    当方法被调用的时候,如果方法有参数,参数必须要实例化,即参数必须有具体的值。在Java中,方法的所有参数都是“传值”的,也就是说,方法中参数变量的值是调用者指定的一个副本。

    基本数据类型参数传值

    对于基本类型的参数,向该参数传递的值的级别不可以高于该参数的级别,可以低于该参数的级别。如果传递值的级别比参数的级别低,则传递过程中会自动转化。

    引用类型参数的传值

    这里先普及一下什么是引用类型: 对象,数组,接口等都是引用类型,关于引用类型的含义或者理解在上篇博客第三点有提到:对象的引用和实体。当参数是引用类型时,“传值”传递过去的是变量中存放的“引用”,而不是变量的实体。

    所以对于两个同类型的引用型变量,如果具有同样的引用,就会有同样的实体,因此,如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化。但是,改变参数的“引用”不会影响向其传值的变量中存放的“引用”。放个图加深理解:
    引用传值

    说明:

    • 上面的意思是说当调用左右任何一个引用来改变实体后,另一个引用所指实体也会改变,它们本来就是一个嘛。当改变左右任何一个引用,就是该引用不再指向这个实体后,另一个应用不受影响,仍然指向这个实体
    • 这个想想应该可以理解,就暂时不放代码示例了,如果大家有要求,我再把代码放上去。

    可变参数

    这个是C++里面没有的,所以请大家多关注一下。

    可变参数是指在声明方法时不给出参数列表中从某项直至最后一项参数的名字和个数,但这些参数的类型应该相同。可变参数使用"…"表示若干个参数,最后一个参数必须是参数列表中的最后一个参数。例如:

    public void aaa(double h,int ... x);
    

    这里的x是方法aaa的参数列表中可变参数的参数代表。参数代表可以通过下标运算来表示参数列表中的具体参数,即x[0],x[1],… ,x[m-1]来表示x所代表的参数。对于一个参数代表,参数代表.length等于参数代表所代表的个数。
    举个栗子:

    class Computer{
    	public double getResult(double a,int ... x){  // !!!
    		double result = 0;
    		int sum = 0;
    		for(int ss:x){ //下面会给解释
    			sum +=ss;
    		}
    		result = a*sum;
    		System.out.println("x代表了"+x.length+"个数");
    		return result;
    	}
    }
    public class Exam{
    	public static void main(String args[]){
    		Computer comp = new Computer();
    		double result = comp.getResult(1.0/3,5,6,7);//x代表三个数
    		System.out.println("5,6,7的平均数:"+result);
    		result = comp.getResult(1.0/5,11,22,33,44,55);//x代表五个数
    		System.out.println("11,22,33,44,55的平均数为:"+result);
    	}
    }
    

    代码运行结果如下,请大家好好体会:

    x1aolin@x1aolin-E402NA:~/桌面$ vim Exam.java
    x1aolin@x1aolin-E402NA:~/桌面$ javac Exam.java 
    x1aolin@x1aolin-E402NA:~/桌面$ java Exam
    x代表了3个数
    5,6,7的平均数:6.0
    x代表了5个数
    11,22,33,44,55的平均数为:33.0
    
    展开全文
  • java 参数传值

    2018-07-12 20:42:11
    java 只有值传递,传递的是参数的副本 基本数据类型的参数传递: 传递的是值的副本,改变副本对原件没有影响 public class 参数传递 { public static void main(String[] args) { int a =7, b = 17; System....

    一直在看书 看的好糊涂
    还是b站好
    java 只有值传递,传递的是参数的副本

    基本数据类型的参数传递:
    传递的是值的副本,改变副本对原件没有影响

    public class 参数传递 {
        public static void main(String[] args) {
            int a =7, b = 17;
            System.out.println(a + " " + b); // 7 17 
            swap(a, b);
            System.out.println(a + " " + b); // 7 17
        }
        public static void swap(int x, int y) {
             x = x ^ y;
             y = x ^ y;
             x = x ^ y;
        }
    }

    引用类型的参数传值:
    先举个栗子

    class Student{
        String name;
    }
    public class 参数传递 {
        public static void change1(Student s1) {
            s1.name = "z大f";
        }
        public static void change2(Student s2) {
            s2 = new Student();
            s2.name = "zff";
        }
        public static void main(String[] args) {
            Student s = new Student();
            s.name = "z小f";
            System.out.println("最初的名字是:" + s.name);// "z小f"
            change1(s);
            System.out.println("调用change1()后的名字是: " + s.name); // "z大f"
            change2(s);
            System.out.println("调用change2()后的名字是: " + s.name);//"z大f"
        }
    }

    对于上面的两个函数传递的都是 对象s 的地址
    change1(): s1 与 s 指向的是同一个地址块,s1 对里面值的改变,即改变了s所指地址里的值
    change2(): s2 与 s 指向的是同一个地址块, s2 又new了一个新的对象,s2就指向了别的地方,s2的改变对s没有影响

    感觉到哪儿字符串都是一个特殊的存在:
    一旦创建String 对象,其值就无法改变,String是把字符串放在一个char数组中:
    private final char value[];

    下面的 s1 += “xyz” 是重新创建了一个String对象 “abcxyz”

    public class 参数传递 {
        public static void change(String s1) {
            String s2 = s1;
            s1 += "xyz";
            System.out.println(s1 == s2); // false
        }
        public static void main(String[] args){
            String s = "abcd";
    
            change(s);
            System.out.println(s); // abcd
        }
    }

    balabala❥

    展开全文
  • JAVA参数传值

    2015-04-09 19:19:15
    //新建一个类,命名为Calc ... public class Calc { //构造一个方法,方法名为add void add(int x){ //定义了一个int类型的参数x x += 1; //表示x = x + 1 System.out.println("x=" +x);//输出x的值 }
    //新建一个类,命名为Calc
    package com.zlm;
    
    public class Calc {
    //构造一个方法,方法名为add
        void add(int x){    //定义了一个int类型的参数x
            x += 1;         //表示x = x + 1
            System.out.println("x=" +x);//输出x的值
        }
    }
    **********************************************************
    **********************************************************
    
    package com.zlm;
    
    public class Main {
        public static void main(String[] args) {
            int a = 2;       //新建一个int类型的变量a,给a赋值为2        Calc c = new Calc();//新建一个Calc类型的变量c,给c赋值new Calc()
            
            c.add(a);        /*因为addCalc类中的方法,所以要返回到Calc中,
                               并把a的值传给x,执行add方法,输出x   */
            System.out.println("a=" +a);//输出a的值//
        }
    }
    输出结果:
    
    自我分析:一开始一直在想:为什么x的值和a不相等?为什么a=2而不是a=3?
    老师讲解后,有了很清晰的认识,c.add(a)这一步只是a把它本身的值传给了x.
    x只在Calc类中执行运算,在add方法中执行x+=1之后,x的值变成了3,最后输出x的值.
    a只给x进行了传值,它俩没有其他的联系,所以a的值还是原来的2,没有任何的变化。
    展开全文
  • JAVA 参数传值机制

    2019-08-18 17:05:24
    JAVA 参数传值机制 public class H_CanShuChuangZhi { int id;//id String name;//账户名 String pwd;//密码 public H_CanShuChuangZhi(int id,String name) { this.id=id; this.name=name; } public ...

    JAVA 参数传值机制

    public class H_CanShuChuangZhi {
      int id;//id
      String name;//账户名
      String pwd;//密码
      
      public H_CanShuChuangZhi(int id,String name) {
    	  this.id=id;
    	  this.name=name;
      }
      
      public void Test(H_CanShuChuangZhi u) {//接收main方法传过来的参数。
    	  u.id=5;
    	  u.name="不能吃";
    	  System.out.println(u.name);
      }
      
      public void Test2(H_CanShuChuangZhi u) {
    	 u=new H_CanShuChuangZhi(2,"皮皮虾");//在这里声明了对象,所以变的是对象的地址。(值依然没有改变)
      }
      
      public static void main(String[] args) {
    	H_CanShuChuangZhi u=new H_CanShuChuangZhi(1,"乐乐鸡");//创建对象给形参赋值
    	u.Test(u);//传递参数
    	System.out.println(u.id+"\t"+u.name);
        u.Test2(u);	//再次传递参数
        System.out.println(u.name);
    }
    }
    

    在这里插入图片描述

    展开全文
  • 1.7 Java参数传值机制

    2020-01-10 16:20:48
    java参数传值机制总述基本数据类型参数的传值引用类型参数的传值示例测试总结 总述       java中,方法中所有参数都是“值传递”,也就是“传递的是值的副本”。也就是说,方法中的是...
  • 第18节 Java参数传值

    2018-08-30 16:07:04
    第18节 Java参数传值 参数传值 方法中最重要的部分之一就是方法的参数,参数属于局部变量,当对象调用方法时,参数被分配内存空间,并要求调用者向参数专递值,即方法被调用时,参数变量必须有具体的值。 ...
  • 认识Java 参数传值

    2020-08-12 20:01:40
    在方法中最重要的部分之一就是方法的参数,参数属于局部...引用类型参数传值 Java中的引用型数据包括数组,对象以及接口。当参数是引用类型时,“传值”传递的变量中存放的“引用”,而不是变量所引用的实体。 需要注
  • 关于Java参数传值机制传递 我将会举一个例子进行说明: 该代码有两个函数,一个是new一个对象传递,一个则不。我相信对比之下更好理解。 代码如下: /** * 关于参数传值机制传递 * 一个new对象(不改变值)...
  • Java参数传值机制

    2019-05-05 19:43:00
    和C语言一样,Java中也是采用“值传递”,即传递的是原参数的复印件,并不会影响原参数 参数传值机制.png
  • Java参数传值还是传引用  参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递。写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用传递参数,以避免因...
  • Java参数传值详解

    2016-12-05 18:37:13
    参数传值  方法中最重要的部分之一就是方法的参数,参数属于局部变量,当对象调用方法时,参数被分配内存空间,并要求调用者向参数专递值,即方法被调用时,参数变量必须有具体的值。 传值机制  在Java中,方法...
  • java参数传值方式

    2017-02-22 19:42:00
    所以java参数传值也就从这两个方面分析。 从内存模型来说参数传递更为直观一些,这里涉及到两种类型的内存:栈内存(stack)和堆内存(heap)。 基本类型作为参数传递时,传递的是这个值的拷贝。无论你怎么改变这...
  • java参数传值问题详解

    2020-05-01 22:01:32
    最近复习了java的基础 发现了很多模棱两可的问题 特此记录 首先复习java的参数传递机制 1:基本类型或基本类型的包装类、String是值传递,引用类型是引用传递。...java参数传递是传递参数的复制 而对...
  • JAVA参数传值,可变参数

    千次阅读 2019-04-28 22:30:27
    引用类型参数传值 一个类声明的两个对象如果具有相同的引用,二者就具有相同的变量。 Battery.java package zhiChuanDi; public class Battery { int eleAmount; Battery(int amount){ //构造方法 ...
  • Java的引用类型: 当参数是引用类型时,“传值”的是变量中存放的“引用”, 而不是变量所引用的实体。 需要注意的是:对于两个相同类型的引用类型变量,如果具有相同的引用,就会用同样的实体。如果改变参数变量所...
  • 参数传值机制 Java中,方法中所有参数都是“值传递”,也就是“传递的是值的副本”。 也就是说,我们得到的是“原参数的复印件,而不是原件”。因此,复印件改变不会影响原件。 注意!传递的是值的副本。**但是引用...
  • java参数传值、传引用

    2015-12-23 09:41:20
    1、结论: 对象类型传递的是引用: 基础数据...传值:意味着将一个变量传递给一个函数参数时,函数的参数接收的是原始值的一个副本,在函数中对参数的任何改变不会影响原始值; 传引用:意味着将一个变量传递给一个

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,841
精华内容 736
关键字:

java参数传值

java 订阅