关于Java方法的参数
刚好看到C++的函数这块,说C++中除了引用类型的形参,其他都是实参的副本(个人总结)。
隐约记得Java中方法的参数也是这么回事,于是手动测试一番。
结果
Java中方法的参数都是值传递,哪怕是引用类型,传递的也是引用本身的副本(指向同一个对象)。
个人以为,将Java中的引用类型的变量看作指针更容易理解。
测试代码
import org.junit.Test;
public class TestFunction {
@Test
public void testInt(){
int a = 3;
int b = 4;
swap(a, b);
System.out.println(a + "---" + b);
}
@Test
public void testString(){
String a = "hehe";
String b = "what";
swap(a, b);
System.out.println(a + "---" + b);
}
@Test
public void testInner(){
Inner a=new Inner();
a.setAge(10);
Inner b=new Inner();
b.setAge(20);
swap(a,b);
System.out.println(a.getAge() + "---" + b.getAge());
}
/**
* 基本类型,是值传递,所以不会修改原对象
*
* @param a
* @param b
*/
public void swap(int a, int b){
a += b;
b = a - b;
a -= b;
}
/**
* 字符串也是值传递
* @param a
* @param b
*/
public void swap(String a, String b){
String tmp = a;
a = b;
b = tmp;
}
/**
* 引用,传递的也是引用本身,类似地址。所以只是副本,不会影响原值。
* @param a
* @param b
*/
public void swap(Inner a, Inner b){
Inner tmp=a;
a=b;
b=tmp;
}
/**
* inner class
*/
class Inner{
private int age;
public void setAge(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
}
}
补充
绝大多数时候,我们使用的都是传入对象(引用类型)的成员,所以不会涉及这个问题。因为引用的副本仍然指向同一个对象。
关于Java方法的参数的更多相关文章
- Java方法的参数传递方式为: 值传递
Java方法的参数传递方式为: 值传递 对于基本数据类型作为参数传递时, 是"按值传递", 这点都认识很清楚. 但是, 当对象或者说引用作为参数传递, Java 的参数传递方式是& ...
- Java方法传递参数传值还是传址的问题
这几天重构项目代码遇到一个疑问:可不可以在方法A中定义一个boolean变量b为false,然后A调用方法C把b传递到C方法中经过一些列业务判断后修改为true,C执行结束后A方法中b的值还是原来的f ...
- Java方法的参数是按值传递的.【转】
在Java中,所有的方法参数,都是"按值传递". 有那么一种说法,Java中基本类型是按值传递,对象是按引用传递.这个说法其实是不确切的,确切的说法是 Java中基本类型将值作为参 ...
- Java - 方法的参数声明
给方法的参数加上限制是很常见的,比如参数代表索引时不能为负数.对于某个关键对象引用不能为null,否则会进行一些处理,比如抛出相应的异常信息. 对于这些参数限制,方法的提供者必须在文档中注明,并且在方 ...
- JAVA方法中参数到底是值传递还是引用传递
当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底是值传递还是引用传递? 答:是值传递.Java 语言的参数传递只有值传递.当一个实例对象作为参数被传递到方法中时,参 ...
- java方法可变参数研究
1 问题引出 (1)缘由 最近在研究如何在项目中引入Redis缓存,于是遇到可变参数这个疑惑点,之前没有好好研究过,为了避免项目后期出现问题. (2)项目相关技术 SpringBoot Redis K ...
- java方法可变参数的写法
jdk1.5之后出现的,该写法避免了当有多个不同个数的参数方法时,对方法的重载.其实就是数组. package com.shipin; /** * @author QiaoJiafei * @vers ...
- JAVA方法传递参数:传值?传引用?
先来看下面这三段代码: //Example1: public class Example1 { static void check(int a) { a++; } public static void ...
- java方法---可变参数
可变参数 在方法的声明中,在指定参数类型后面加一个...(省略号) 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通参数必须在它之前声明:
随机推荐
- STM32以太网ETH
注:stm32F1系列中F103片上不含MAC控制器,所以不支持以太网,只有F105和F107才支持
- InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings In
InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is s ...
- django打印字典
- jenkins 构建执行jmeter测试流程
性能测试使用maven工程说明1.依赖尽量用maven依赖管理2.添加jmeter maven依赖 <dependency> <groupId>org.apache.jmete ...
- ps抠图
*套索工具:简单抠图 *多边形套索工具:简单抠图 *磁性套索工具:可以自动贴着走 *快速选择工具抠图,使用方法:主要控制画笔大小. *魔术棒抠图,使用方法:主要控制容差大小 *钢笔抠图,常见商业抠图 ...
- 如何让div在整个页面中居中?
参考必应主页的样式,在页面中放置一个表格,100%宽高,然后表格内部是一个单元格,在单元格内部放置div,使其margin为auto即可. <table style="height: ...
- Android学习之Android 5.0分享动画实现微信点击全屏效果
Android5.0过渡动画,请看 http://blog.csdn.net/qq_16131393/article/details/51112772 今天用分享动画实现微信点击全屏效果 本文源代码下 ...
- QListWidget加入小控件
在写一个简单的文件浏览器时,遇到一个问题.想实现新建目录时能像一般的文件管理器那样,目录图标以下有一个编辑框提示用户给目录命名(例如以下图),可是不知道怎么给单元项QListWidgetItem加入Q ...
- JAVA-从题目看算法,将输入字符串进行排序并输出
来看一个排列的样例.它所做的工作是将输入的一个字符串中的全部元素进行排序并输出,比如:你给出的參数是"abc" 则程序会输出:abc acb bac bca cab cba 这是一 ...
- 简单的搭建php开发平台 WAMP
下载wamp,地址http://www.wampserver.com/en/#download-wrapper 和正常软件安装下就行了. 修改WAMP中mysql默认空密码 WAMP安装好后,mysq ...