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. 【开发笔记】- 在Grails下查看打印真实的SQL

    以往我们都是在hibernate里面开启sql,在grails里面只需要在 DataSource.groovy 里面的一个dataSource加入一个 logSql = true即可,但是这样加后发出 ...

  2. CSS 样式的使用方式、选择器

    在html中使用css的三种方式: 1.行内样式:同过元素的style属性来设置 <p style="font-size:20px; color:red">hello& ...

  3. IVS_原理

    智能视频分析技术指计算机图像视觉分析技术,是人工智能研究的一个分支,它在图像及图像描述之间建立映射关系,从而使计算机能够通过数字图像处理和分析来理解视频画面中的内容.智能视频分析技术涉及到模式识别.机 ...

  4. Httpd服务入门知识-Httpd服务常见配置案例之定义路径别名

    Httpd服务入门知识-Httpd服务常见配置案例之定义路径别名 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.创建测试数据 [root@node101.yinzhengj ...

  5. commix 命令注入工具

    关于系统命令注入,可以参考这篇文章:命令攻击介绍 系统命令注入场景 在对企业进行安全测试时候,很少会发现系统注入漏洞.这是因为大部分情况下代码业务主要是数据操作.文件操作.逻辑处理和api接口调用等, ...

  6. Caused by: org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within timeout: 5000

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'brandControl ...

  7. laravel 配置路由 api和web定义的路由的区别详解

    1.路由经过中间件方面不同 打开kerenl.php就可以看到区别 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware ...

  8. 什么是 MFA?

    Multi-Factor Authentication (MFA) 是一种简单有效的最佳安全实践方法,它能够在用户名和密码之外再额外增加一层安全保护. 启用 MFA 后,用户登录阿里云网站时,系统将要 ...

  9. 基于Docker搭建GitLab代码管理

    关于Git.SVN的优缺点就不再重复了,本篇主要以实际搭建为主. 1.下载镜像文件 在命令行窗口执行如下指令,预计下载完成4分钟. docker pull beginor/gitlab-ce:11.0 ...

  10. BZOJ 1818: [Cqoi2010]内部白点 扫描线+树状数组

    问题转化为求每一个极长横线段与极长纵线段的交点个数. 这个东西用扫描线+树状数组维护一下就可以了. code: #include <cstdio> #include <algorit ...