java值传递和引用传递的题目_Java 值传递和引用传递
结论
java中都是值传递,没有引用传递。
如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的值不会改变原始的值.。
如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的值,那么在函数内的改变会影响到传入的参数。如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的地址,所以不会改变参数的值。
经典题目
class Person {
int age = 10;
}
public class Main {
public static void main(String[] args) {
//case 1
int var1 = 10;
change(var1);
System.out.println(var1);
//case 2
Person var2 = new Person();
change(var2);
System.out.println(var2.age);
//case 3
String var3 = "hello";
change(var3);
System.out.println(var3);
//case 4
Person var4 = new Person();
changeNew(var4);
System.out.println(var4.age);
}
private static void changeNew(Person var4) {
var4.age = 20;
var4 = new Person();//这里更改了入参的地址
var4.age = 10;
}
private static void change(String var3) {
var3 = "world";
}
private static void change(Person person) {
person.age = 20;
}
private static void change(int var1) {
var1 = 20;
}
}
在case 1中,入参是基本数据类型,所以修改的是副本的数值,不会影响原变量。
在case 2中,入参是引用对象,传入的是引用变量的地址,所以修改了地址所对应的值,会影响原变量。这里引用变量也包括数组,对于数组来说传入的是第一个元素的地址。
在case 3中,入参是String,是一个引用类型,但是String是一个final类,所以传入的是地址,对String的改变是重新开辟新的空间,而不是修改地址对应的内容,所以也不会修改原变量的值。
在case 4中,原理和case 3类似,也是开辟了新的地址空间,所以并没有对原地址所对应的内容进行改动。
输出为
10
20
hello
20
java值传递和引用传递的题目_Java 值传递和引用传递相关推荐
- java引用是对象吗_java – 什么是类,引用和对象?
如果你喜欢住房隐喻: 一个班级就像一座房子的蓝图.使用这个蓝图,你可以建造尽可能多的房屋,你喜欢. >你建立的每个房子(或实例化,在OO lingo)是一个对象,也称为一个实例. 当然,每个房子 ...
- java -cp 引用多个包_Java -cp 命令行引用多个jar包的简单写法(Windows、Linux)
1.Windows下用法 在Windows上,可以使用 java your-jar-lib-fold/* your-main-class your-jar-lib-fold为存放一堆jar文件的路径. ...
- java形参和实参的三种传递方式(值传递,地址传递,引用传递)
博客 博客 值传递:对形参的修改不会影响到实参 引用传递:对形参的修改会影响实参 一.值传递 在主函数中 #include <iostream> using namespace std;v ...
- java中可以改变引用的指向吗_java中引用传递问题,在函数中修改引用的指向,会不会影响实参?...
拉丁的传说 是时候展现一下我的JAVA基础知识了,2333.我按照执行顺序给你写注释好了.Personp1=newPerson(10);//创建了一个对象//p1.age=10;modify(p1); ...
- Java方法01 方法(函数)定义、调用、值传递、重载、命令行传递参数
Java 方法的定义.调用.值传递.重载.命令行传递参数 1. 什么是方法? 2. 方法的定义和调用 3. 值传递和引用传递 4. 方法的重载 5. 命令行传递参数 6. 可变参数(输入参数的数量不确 ...
- 【C++引用超详细笔记, 引用、指针和值传递的汇编级辨析,对象、继承和引用】
文章目录 引用变量 1. 什么是引用.如何创建一个引用变量? 2. 引用的具体使用方法 2.1 引用做函数的形参 2.2 引用参数的const用法 左值.右值是什么? 2.3 结构体的引用 2.4 引 ...
- java 传入参数_Java 中方法参数的传递
java中方法参数传递看似有两种,值传递和引用传递.而实际上都是值传递. 所谓值传递,传递的是变量的副本就是说,在将变量a作为参数传进方法中时,方法中接收到的是a的副本,在方法中对参数的修改实际上修改 ...
- Java学习第十二天----方法参数类型以及返回值类型问题、链式编程、package包、权限修饰符、内部类、成员内部类
Java学习第十二天----方法参数类型以及返回值类型问题.链式编程.package包.权限修饰符.内部类.成员内部类 1.方法参数类型: (1)类名作为形式参数: public class MyTe ...
- Java之数组的定义格式,【默认值规则】,Java内存划分5大区,面向对象类的基本定义和对象的使用,private和this关键字,类的构造方法,标准类的组成部分。
目录 1.数组 动态初始化数组的格式: 默认值规则 静态初始化数组的格式: 静态方式的省略格式 注意: 2.java的内存划分 3.数组内存图 4.数组常见的问题 5.面向对象 (1)类和对象 (2) ...
最新文章
- MySQL_update同一张表
- 判断图有无环_萧阳环保教你判断布袋除尘器是否合格记住这3点
- git pull 卡在 Unpacking objects 解决方法
- 【Android Studio安装部署系列】十一、Android studio获取数字签名信息
- config.class.php,The EventConfig class - PHP 7 中文文档
- 物联网搜集大量数据协助制定业务策略 成为银行业竞争利器
- pandas中dataframe的索引问题
- 方型二维码换成圆形_1分钟将微信头像从方形变为圆形
- openproj centos安装及其输入中文变方块乱码解决
- 超声波测距(含报警功能)
- npm i出错解决Cannot read properties of null (reading ‘pickAlgorithm‘)
- java 线程优先级_Java线程优先级
- eclipse复制行快捷键与屏幕旋转冲突的解决
- 研究生论文阅读方法论—怎样查找综述型文章
- Kettle Carte模式
- 个人自我介绍快闪风格PPT模板
- perl中DBD-oracle安装,perl DBD :: Oracle模块安装
- Linux(U盘挂载,玩客云armbian详细挂载U盘扩容)
- 计算机考csp200分啥水平,计算机与信息工程学院成功举办第20次CCF CSP认证考试
- 从事程序员的工作,Python大数据、Java、前端,哪个有发展前景?