Java里方法的参数传递方式
Java里方法的参数传递方式只有一种:值传递。
Java中参数传递的都是参数值
下面从两个维度来看
1、传递的参数是8种基本数据类型
这个比较好理解,8种基本数据类型,作为参数时,可以理解为原来的一个副本,作为方法内的局部变量,存储在方法栈中。
副本值的改变,对原始值无任何影响。
2、传递的参数是对象引用类型
很多人可能有一个误解,认为java中对象作为参数时,传递的是引用,其实不然。
在java中的设计模型中,一个对象可以拆分成两部分,一个是指向对象的变量名,一般存储在栈中,
一个是真正的对象内容,存储在堆中。
具体模型如下图:

所以对象作为参数时,传递的也是值,只不过这个值有点特殊,是对象的引用地址,即栈内存里面的变量所指向的地址值
附 代码demo
/**
* 描述 : 测试java中数据的传递
*
*
* @Author : zhanghao
* @Time : 2019/12/19 18:31
*/
public class Test { public static void main(String[] args) {
Test test=new Test(); //1、测试基本数据类型
int basicVal=1;
System.out.println("参数前 basicVal:"+basicVal);
test.basicDataTypeParam(basicVal);
System.out.println("参数后 basicVal:"+basicVal); //2、测试引用类型参数
Student stu=new Student("张三");
System.out.println("参数前 stu.name:"+stu.getName());
test.referDataTypeParam(stu);
System.out.println("参数后 stu.name:"+stu.getName()); //3、测试引用数组
Integer[] arrInt=new Integer[10];
arrInt[0]=123;
System.out.println("参数前 arrInt.length:"+arrInt.length);
System.out.println("参数前 arrInt[0]:"+arrInt[0]);
test.referArrayParam(arrInt);
System.out.println("参数后 arrInt.length:"+arrInt.length);
System.out.println("参数后 arrInt[0]:"+arrInt[0]); //4、其它常用引用类型 如字符串 String
String strVal="2008年,北京欢迎你";
System.out.println("参数前 strVal:"+strVal);
test.referStrParam(strVal);
System.out.println("参数后 strVal:"+strVal); } /**
* 测试字符串引用类型
*
*
* @param strVal
*/
private void referStrParam(String strVal) {
strVal="2020年,北京欢迎你";
} /**
* 测试引用数组 同时改变参数值,并为参数重新赋值
*
* @param arrInt
*/
private void referArrayParam(Integer[] arrInt) {
arrInt[0]=456;
arrInt=new Integer[20];
} /**
* 测试引用数据类型
*
* @param stu
*/
private void referDataTypeParam(Student stu) {
stu.setName("李四");
} /**
* 测试基本数据类型参数
*
* @param basicVal
*/
private void basicDataTypeParam(int basicVal) {
basicVal=2;
}
/**
* 描述 : 学生类实体
*
* @Author : zhanghao
* @Time : 2019/12/21 19:22
*/
public class Student {
String name; public Student(String name){
this.name=name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
Java里方法的参数传递方式的更多相关文章
- 《Java中方法的参数传递方式只有一种:值传递》
//方法的参数传递机制(1):基本类型做形参的传递. class PrimitiveTransferTest { public static void swap(int a,int b) { //下面 ...
- Java方法的参数传递方式为: 值传递
Java方法的参数传递方式为: 值传递 对于基本数据类型作为参数传递时, 是"按值传递", 这点都认识很清楚. 但是, 当对象或者说引用作为参数传递, Java 的参数传递方式是& ...
- Java:方法的参数是传值还是传引用
Java中方法的参数总是采用传值的方式. 下列方法欲实现对象的交换,但实际上是不能实现的. public void swap(simpleClass a,simpleClass b){ simpleC ...
- java中方法传入参数时:值传递还是址传递?
JAVA中的数据类型有两大类型: ① 基本数据类型:逻辑型(boolean).文本型(char).整数型(byte.short.int.long).浮点型(float.double) ② 引用数据类型 ...
- 关于Java里方法重载
覆盖和重载很重要,并且比较容易混淆,所以面试中常见.基础回答:覆盖(Override),又叫重写,是指子类对父类方法的一种重写,方法名.参数列表必须相同,返回值小于父类,只能比父类抛出更少的异常,访问 ...
- JAVA 重载方法,参数为NULL时,调用的处理 (精确性原则)
引子:大家可以思考一下下面程序的输出结果 public class TestNull { public void show(String a){ System.out.println("St ...
- 10 Java的方法 可变参数
5.可变参数 JDK 1.5开始,Java支持传递同类型的可变参数给一个方法. 在方法声明中,在制定参数类型后加一个省略号(-). 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数.任何普通 ...
- 关于Java方法的参数
刚好看到C++的函数这块,说C++中除了引用类型的形参,其他都是实参的副本(个人总结). 隐约记得Java中方法的参数也是这么回事,于是手动测试一番. 结果 Java中方法的参数都是值传递,哪怕是引用 ...
- 新手容易混乱的String+和StringBuffer,以及Java的方法参数传递方式。
之前在交流群里和猿友们讨论string+和stringbuffer哪个速度快以及Java的方法参数传递的问题,引起了群里猿友的小讨论.最终LZ得出的结果是string+没有stringbuffer快, ...
随机推荐
- tomcat添加https服务
系统环境: centos6.7 jdk-7u79-linux-x64 apache-tomcat-7.0.57 apr-1.5.2 apr-util-1.5.4 一.tomcat安装 自己准备tomc ...
- Java 之 Scanner 类
一.Scanner 类 Scanner 是一个可以解析基本类型和字符串的简单文本扫描器. Demo: Scanner sc = new Scanner(System.in); int i = sc.n ...
- 英语koreite寿山石koreite单词
koreite指寿山石 寿山石是中华瑰宝,中国传统“四大印章石“之一.分布在福州市北郊晋安区与连江县.罗源县交界处的“金三角”地带. 寿山石是福州特有的名贵石材,其石质晶莹.脂润.色彩斑斓,色泽浑然天 ...
- 基础的python数据分析
1. 单行注释 #print("hello word;") 2. 多行注释 ''' print("hello word;") print("hello ...
- 【Spring Cloud】Spring Cloud之Spring Cloud Sleuth,分布式服务跟踪(1)
一.Spring Cloud Sleuth组件的作用 为微服务架构增加分布式服务跟踪的能力,对于每个请求,进行全链路调用的跟踪,可以帮助我们快速发现错误根源以及监控分析每条请求链路上的性能瓶颈等. 二 ...
- Jmeter 使用集合点
概念解释 集合点,这个概念是loadrunner中的. 这个东西可以这样理解,比如我们在跑100起跑的时候,需要在发令枪响之后,10人同时起步,等10人同时达到终点, 再次开发令枪,重复上面的动作. ...
- GMT与UTC简介(转)
GMT与UTC简介 一.简介 许多人都知道两地时间表简称为GMT或UTC,而世界时区表则通称为World Time ,那么GMT与UTC的实质原意又是为何?世界时区又是怎么区分的?面盘上密密麻麻的英文 ...
- 某个新闻网站抓去自媒体账号 queryId js破解
第一步: 发现加密 第二部:搜索加密参数 queryId 第三部:找到js核心加密代码 第四部:代码实现 window = {} function utf8ToBase64(t) { console. ...
- Win10上的Docker应用:Kubernetes(容器集群)
阅读目录: Docker应用:Hello World Docker应用:Docker-compose(容器编排) Docker应用:Kubernetes(容器集群) 前言: 终于出第三篇了,上个月就已 ...
- 项目Beta冲刺--4/7
项目Beta冲刺--4/7 作业要求 这个作业属于哪个课程 软件工程1916-W(福州大学) 这个作业要求在哪里 项目Beta冲刺 团队名称 基于云的胜利冲锋队 项目名称 云评:高校学生成绩综合评估及 ...