java方法传递参数传递的到底是什么?值调用:引用调用
来源:互联网 发布:编程语言效率排行 编辑:程序博客网 时间:2024/05/17 22:46
前言:在Java中我们常常会编写很多方法,大多数方法都会传递参数,那这参数传递的究竟是什么呢?是按值调用还是按引用调用?下面我们就来详细讨论下这个问题。
1.传递基本的数据类型:其实在java中总是采用的是按值调用,也就是说,方法得到的并不是传入参数的本身,而是传入参数的一个拷贝。方法并不能修改传递给它任何参数变量的内容。
╰(*°▽°*)╯举个栗子:
package com.zrh.test;public class Student {private int sid;private String name;private double score;private int age;public static void addScore(double score){score = score+score;System.out.println("addScore_score:"+score);}public static void main(String[] args) {double score = 50;Student.addScore(score);System.out.println("main_score:"+score);}}
结果:
addScore_score:100.0main_score:50.0
结果分析:一个学生的分数是50分,调用addScore方法将分数翻倍,从打印出的信息可以看出addScore方法并没有改变传入的参数score的值,因为addScore实际传递的只是参数score的一个拷贝值,传入的参数score的作用域只在addScore方法内,方法执行完就被销毁了,对传递给方法的参数变量没有任何作用。
2.传递引用:传递的是对象引用的拷贝,拷贝变量和传入变量指向的是同一个对象,所以传递引用可以修改对象的参数。
╰(*°▽°*)╯举个栗子:
public class Student {private int sid;private String name;private double score;private int age;private static int nextId = 0;public Student() {nextId++;this.sid = nextId;}@Overridepublic String toString() {return "Student [sid=" + sid + ", name=" + name + ", score=" + score+ ", age=" + age + "]";}public static void addScore(double score){score = score+score;System.out.println("addScore_score:"+score);}public static void editStudent(Student student){student.name = "jack";student.age = 15;}public static void swap(Student student1,Student student2){Student temp = student1;student1 = student2;student2 = student1;}public static void main(String[] args) {Student student = new Student();editStudent(student);System.out.println(student);}}运行结果:因为拷贝的引用变量和传入方法的引用变量指向同一个存储对象,所以在方法editStudent中修改了对象的参数,也就就是修改了传入的引用变量所指向对象的参数。
Student [sid=1, name=jack, score=0.0, age=15]
3.需要注意的问题:在很多时候我们都以为java对对象采用的是引用的调用,实际上是不对的,其实调用的是拷贝的引用。
╰(*°▽°*)╯举个栗子:
public class Student {private int sid;private String name;private double score;private int age;private static int nextId = 0;public Student() {nextId++;this.sid = nextId;}@Overridepublic String toString() {return "Student [sid=" + sid + ", name=" + name + ", score=" + score+ ", age=" + age + "]";}public static void addScore(double score){score = score+score;System.out.println("addScore_score:"+score);}public static void editStudent(Student student){student.name = "jack";student.age = 15;}public static void swap(Student student1,Student student2){Student temp = student1;student1 = student2;student2 = student1;}public static void main(String[] args) {Student student1 = new Student();Student student2 = new Student();student1.name = "syudent1";student1.age = 15;student2.name = "syudent2";student2.age = 18;swap(student1, student2);System.out.println("student1:"+student1);System.out.println("student2:"+student2);}}运行结果:student1和student2并没有交换对象,因为方法传递的是拷贝引用,在方法内引用交换了互相指向的对象,但是方法结束后两个变量就销毁了,并没有改变main中student1和student2引用的对象。
student1:Student [sid=2, name=syudent1, score=0.0, age=15]student2:Student [sid=3, name=syudent2, score=0.0, age=18]
阅读全文
0 0
- java方法传递参数传递的到底是什么?值调用:引用调用
- JAVA中函数调用参数传递的理解(值传递和引用传递的理解)
- 画重点,Java方法的参数到底是值传递还是引用传递?
- java的方法调用,参数是按值传递还是按引用传递
- Java方法参数的传递机制,值传递?引用传递?
- Java参数传递到底是值传递还是引用传递?
- 值传递-引用传递-指针传递-函数调用时指针参数的传递
- 方法调用语句, 值传递与引用传递的区别
- Java的参数传递到底是引用传递还是值传递
- Java 方法参数的值传递和引用传递
- Java的方法的参数传递,值传递和引用传递还有String字符串传递
- 探究java方法参数传递--引用传递?值传递!
- java方法参数传递方式--按值传递、引用传递
- c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别
- c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别
- Java方法调用时传递参数问题
- Java方法调用的值传递方式
- 调用参数的传递
- xmldom解析
- css 的一点记录
- hh
- CentOS简单配置防御ddos攻击
- 网页设计前端页面制作的规范要求和注意事项
- java方法传递参数传递的到底是什么?值调用:引用调用
- ORACLE RCU 安装配置
- MyEclipse基本配置以及和Tomcat、SVN整合
- Android 对话框
- 如何处理 JavaScript 内存泄露
- Word2013制作中国的传统福字在屋门上贴的福字(福倒了)
- Sublime安装与常用配置
- 直播App中Android酷炫礼物动画实现方案(上篇)
- php $_REQUEST 数据错误