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. 你可能还不知道的关于JavaScript类型的细节?

    类型 七种类型: Undefined Null Boolean String Number Symbol Object Undefined.Null 阅读问题:为什么有的编程规范要求使用void 0 ...

  2. 英语orientaljasper鸡血石orientaljasper单词

    鸡血石(orientaljasper),是辰砂条带的地开石,因鲜红色似鸡血的辰砂(朱砂)而得名.鸡血石含有辰砂(朱砂).石英.玉髓35%-45%.磁铁矿.赤铁矿6%-12%.辰砂约5%-8%. 鸡血石 ...

  3. 06-Vue路由

    什么是路由 对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源: 对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有 ...

  4. Filter和Listener

    Filter: 1.概念: web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,做一些事. 过滤器的作用:一般用于完成一些通用的操作:登录验证.统一编码处理,敏感字符处理.... 2.快 ...

  5. 浅谈Python设计模式 - 外观模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 外观模式 外观模式的核心在于将复杂的内部实现包装起来,只向外界提供简单的调用接口 ...

  6. 图论篇2——最小生成树算法(kurskal算法&prim算法)

    基本概念 树(Tree) 如果一个无向连通图中不存在回路,则这种图称为树. 生成树 (Spanning Tree) 无向连通图G的一个子图如果是一颗包含G的所有顶点的树,则该子图称为G的生成树. 生成 ...

  7. 配置VScode c语言环境

    vscode 提示 <sys/socket.h>找不到, 原来是不同平台上,头文件不一样. 参考:https://blog.csdn.net/qq_28581077/article/det ...

  8. js生成随机密码,密码位数自定

    话不多说,上代码 function pb(size){     var seed = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N', ...

  9. memoryDiary

    What did you accomplish today? , did you exercise today? Do you care about the people around you tod ...

  10. Boring counting HDU - 3518 (后缀自动机)

    Boring counting \[ Time Limit: 1000 ms \quad Memory Limit: 32768 kB \] 题意 给出一个字符串,求出其中出现两次及以上的子串个数,要 ...