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. DataPipeline丨构建实时数据集成平台时,在技术选型上的考量点

    文 | 陈肃 DataPipeline  CTO 随着企业应用复杂性的上升和微服务架构的流行,数据正变得越来越以应用为中心. 服务之间仅在必要时以接口或者消息队列方式进行数据交互,从而避免了构建单一数 ...

  2. android中如何实现UI的实时更新---需要考虑电量和流量

    1.如果不考虑电量和流量的话,只需要在对应的activity里面继承Runnable,在run方法里面写一个while死循环,调用接口返回数据,如果数据发生了变化,就立即更新UI 2.需要考虑电量的话 ...

  3. web模拟终端 --使用shellinabox

    关于shellinabox ShellInABox实现了一个Web服务器,可以将任意命令行工具导出到基于Web的终端仿真器.任何支持JavaScript和CSS的Web浏览器都可以访问此模拟器,并且不 ...

  4. phpstorm goland webstorm jetbrain

    1.去官网搞点安装包2.下载完之后一定要打开一下否则个别机型会出现包已损坏的错误提示3.下载Jet Brains License链接:https://pan.baidu.com/s/10nRk7Gei ...

  5. Linux上安装GO开发环境+第一个程序编译运行

    首先官网下载包: 使用wget命令下载到自己的目录里 wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz 解压: tar -xvf go ...

  6. Linux无法免密登录的原因

    一.免密登录的方法 下面操作是把/root/.ssh/id_dsa.pub文件内容追加到192.168.7.100系统中的/root/.ssh/authorized_keys文件中 # 创建并发送密钥 ...

  7. 织梦DedeCms网站内部SEO详细分析

    一.确定网站的目标关键词 最为重要的一方面,一般网站首页的目标关键词建议在1-3个.对于目标关键词的选取有几个建议 1.定位:网站的内容和业务相关 2.分析:对用户体验及竞争对手的网站进行分析 3.筛 ...

  8. CodeForces - 1051E :Vasya and Big Integers(Z算法 & DP )

    题意:给定字符串S,A,B.现在让你对S进行切割,使得每个切割出来的部分在[A,B]范围内,问方案数. 思路:有方程,dp[i]=Σ dp[j]   (S[j+1,i]在合法范围内).    假设M和 ...

  9. strings命令(转)

    以前我用strings命令的频率不高, 现在越用越顺手, 而且已经是离不开strings命令了.虽然以前说过strings命令, 但今天还是要说. 主要是两大用途, 下面来说明一下: 一. 确认代码编 ...

  10. js 实现页面点击按钮复制内容

    前言: 我们平时在页面中是按照长按来实现复制相关的内容,那么怎么用js实现点击按钮实现复制相关的内容呢?请看如下方法: 实现步骤: 1.引入相关的js(ClipboardJS插件) <scrip ...