结论

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 值传递和引用传递相关推荐

  1. java引用是对象吗_java – 什么是类,引用和对象?

    如果你喜欢住房隐喻: 一个班级就像一座房子的蓝图.使用这个蓝图,你可以建造尽可能多的房屋,你喜欢. >你建立的每个房子(或实例化,在OO lingo)是一个对象,也称为一个实例. 当然,每个房子 ...

  2. java -cp 引用多个包_Java -cp 命令行引用多个jar包的简单写法(Windows、Linux)

    1.Windows下用法 在Windows上,可以使用 java your-jar-lib-fold/* your-main-class your-jar-lib-fold为存放一堆jar文件的路径. ...

  3. java形参和实参的三种传递方式(值传递,地址传递,引用传递)

    博客 博客 值传递:对形参的修改不会影响到实参 引用传递:对形参的修改会影响实参 一.值传递 在主函数中 #include <iostream> using namespace std;v ...

  4. java中可以改变引用的指向吗_java中引用传递问题,在函数中修改引用的指向,会不会影响实参?...

    拉丁的传说 是时候展现一下我的JAVA基础知识了,2333.我按照执行顺序给你写注释好了.Personp1=newPerson(10);//创建了一个对象//p1.age=10;modify(p1); ...

  5. Java方法01 方法(函数)定义、调用、值传递、重载、命令行传递参数

    Java 方法的定义.调用.值传递.重载.命令行传递参数 1. 什么是方法? 2. 方法的定义和调用 3. 值传递和引用传递 4. 方法的重载 5. 命令行传递参数 6. 可变参数(输入参数的数量不确 ...

  6. 【C++引用超详细笔记, 引用、指针和值传递的汇编级辨析,对象、继承和引用】

    文章目录 引用变量 1. 什么是引用.如何创建一个引用变量? 2. 引用的具体使用方法 2.1 引用做函数的形参 2.2 引用参数的const用法 左值.右值是什么? 2.3 结构体的引用 2.4 引 ...

  7. java 传入参数_Java 中方法参数的传递

    java中方法参数传递看似有两种,值传递和引用传递.而实际上都是值传递. 所谓值传递,传递的是变量的副本就是说,在将变量a作为参数传进方法中时,方法中接收到的是a的副本,在方法中对参数的修改实际上修改 ...

  8. Java学习第十二天----方法参数类型以及返回值类型问题、链式编程、package包、权限修饰符、内部类、成员内部类

    Java学习第十二天----方法参数类型以及返回值类型问题.链式编程.package包.权限修饰符.内部类.成员内部类 1.方法参数类型: (1)类名作为形式参数: public class MyTe ...

  9. Java之数组的定义格式,【默认值规则】,Java内存划分5大区,面向对象类的基本定义和对象的使用,private和this关键字,类的构造方法,标准类的组成部分。

    目录 1.数组 动态初始化数组的格式: 默认值规则 静态初始化数组的格式: 静态方式的省略格式 注意: 2.java的内存划分 3.数组内存图 4.数组常见的问题 5.面向对象 (1)类和对象 (2) ...

最新文章

  1. MySQL_update同一张表
  2. 判断图有无环_萧阳环保教你判断布袋除尘器是否合格记住这3点
  3. git pull 卡在 Unpacking objects 解决方法
  4. 【Android Studio安装部署系列】十一、Android studio获取数字签名信息
  5. config.class.php,The EventConfig class - PHP 7 中文文档
  6. 物联网搜集大量数据协助制定业务策略 成为银行业竞争利器
  7. pandas中dataframe的索引问题
  8. 方型二维码换成圆形_1分钟将微信头像从方形变为圆形
  9. openproj centos安装及其输入中文变方块乱码解决
  10. 超声波测距(含报警功能)
  11. npm i出错解决Cannot read properties of null (reading ‘pickAlgorithm‘)
  12. java 线程优先级_Java线程优先级
  13. eclipse复制行快捷键与屏幕旋转冲突的解决
  14. 研究生论文阅读方法论—怎样查找综述型文章
  15. Kettle Carte模式
  16. 个人自我介绍快闪风格PPT模板
  17. perl中DBD-oracle安装,perl DBD :: Oracle模块安装
  18. Linux(U盘挂载,玩客云armbian详细挂载U盘扩容)
  19. 计算机考csp200分啥水平,计算机与信息工程学院成功举办第20次CCF CSP认证考试
  20. 从事程序员的工作,Python大数据、Java、前端,哪个有发展前景?

热门文章

  1. 小米为其他手机适配rom_让小米引以为傲的MIUI,为什么不再给其它手机适配了?...
  2. 前端复习之JavaScript基础
  3. MySQL进阶操作之视图
  4. MySQL5.7 安装(win)
  5. FreeTextBox 3.1.6 的实践总结和几个问题
  6. 100万愤怒的小鸟:中国手机开发者生存调查
  7. 深度学习《patchGAN》
  8. 漫步数理统计十六——变换
  9. leetcode —— 1079. 活字印刷
  10. leetcode - 673. 最长递增子序列的个数