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里方法的参数传递方式的更多相关文章

  1. 《Java中方法的参数传递方式只有一种:值传递》

    //方法的参数传递机制(1):基本类型做形参的传递. class PrimitiveTransferTest { public static void swap(int a,int b) { //下面 ...

  2. Java方法的参数传递方式为: 值传递

    Java方法的参数传递方式为: 值传递 对于基本数据类型作为参数传递时, 是"按值传递", 这点都认识很清楚. 但是, 当对象或者说引用作为参数传递, Java 的参数传递方式是& ...

  3. Java:方法的参数是传值还是传引用

    Java中方法的参数总是采用传值的方式. 下列方法欲实现对象的交换,但实际上是不能实现的. public void swap(simpleClass a,simpleClass b){ simpleC ...

  4. java中方法传入参数时:值传递还是址传递?

    JAVA中的数据类型有两大类型: ① 基本数据类型:逻辑型(boolean).文本型(char).整数型(byte.short.int.long).浮点型(float.double) ② 引用数据类型 ...

  5. 关于Java里方法重载

    覆盖和重载很重要,并且比较容易混淆,所以面试中常见.基础回答:覆盖(Override),又叫重写,是指子类对父类方法的一种重写,方法名.参数列表必须相同,返回值小于父类,只能比父类抛出更少的异常,访问 ...

  6. JAVA 重载方法,参数为NULL时,调用的处理 (精确性原则)

    引子:大家可以思考一下下面程序的输出结果 public class TestNull { public void show(String a){ System.out.println("St ...

  7. 10 Java的方法 可变参数

    5.可变参数 JDK 1.5开始,Java支持传递同类型的可变参数给一个方法. 在方法声明中,在制定参数类型后加一个省略号(-). 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数.任何普通 ...

  8. 关于Java方法的参数

    刚好看到C++的函数这块,说C++中除了引用类型的形参,其他都是实参的副本(个人总结). 隐约记得Java中方法的参数也是这么回事,于是手动测试一番. 结果 Java中方法的参数都是值传递,哪怕是引用 ...

  9. 新手容易混乱的String+和StringBuffer,以及Java的方法参数传递方式。

    之前在交流群里和猿友们讨论string+和stringbuffer哪个速度快以及Java的方法参数传递的问题,引起了群里猿友的小讨论.最终LZ得出的结果是string+没有stringbuffer快, ...

随机推荐

  1. [摘抄] 3.AMD规范与CommonJS规范的兼容性

    3. AMD规范与CommonJS规范的兼容性 CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作. AMD规范则是非同步加载模块,允许指定回调函数. 由于Node.js ...

  2. Ueditor 关于视频上传相关问题

      !!!每次改动后记得,清除一下浏览器缓存再试 !!!   4点: 1.修复编辑时视频不能预览问题: 2.插入视频的时候.在预览的窗口提示 “输入的视频地址有误,请检查后再试!” 3.ueditor ...

  3. css3中的calc的使用

    最近在布局的时候遇到一个问题,在页面中的左侧是侧边栏,右边是内容区域,内容区域中有一个固定定位的标签页,在设置固定定位的标签设置宽度的时候应该是内容区域的宽度,而固定定位的时候相对于是窗口的宽度,所以 ...

  4. DataPipeline CTO陈肃:构建批流一体数据融合平台的一致性语义保证

    文 | 陈肃 DataPipelineCTO 交流微信 | datapipeline2018 本文完整PPT获取 | 关注公众号后,后台回复“陈肃” 首先,本文将从数据融合角度,谈一下DataPipe ...

  5. PL/SQL 出现死锁解决办法

    转自:https://blog.csdn.net/u013015629/article/details/48005763 在PL/SQL中操作数据表时,长时间没反应,并且编辑某个表中数据时,出现“re ...

  6. Jquery。

    Jquery: 1.概念:JavaScript的框架.本质上就是一些JS文件,封装了JS的原生代码而已. 2.快速入门:下载Jquery -导入文件-使用. 3.JQ对象和JS对象的区别. * :Jq ...

  7. 【Maven】Maven中排除依赖、归类依赖、优化依赖

    参考博文:Maven中排除依赖.归类依赖.优化依赖

  8. PHP fsockopen 异步写入文件

    b.php <?php $url = 'http://fsc.com/a.php'; $param = array( 'name'=>'fdipzone', 'gender'=>'m ...

  9. Junit测试入门

    junit测试的6大注解 @BeforeClass    最先执行,在整个测试类中只会执行一次,所以它只能声明一次,并且被它标注的方法必须声明为static @Before       可以声明多个方 ...

  10. (七)Kubernetes Service资源

    Service概述 为什么要使用Service Kubernetes Pod是平凡的,由Deployment等控制器管理的Pod对象都是有生命周期的,它们会被创建,也会意外挂掉.虽然它们可以由控制器自 ...