[Java]_函数传参的疑惑与思考
问题来源于leetcode上的两道题 Path Sum I && II,分别写了两个dfs。
void dfs(TreeNode node , int sum , ArrayList<Integer> curPath)
void dfs(TreeNode node , int sum , boolean ifExist)
问题:在1号中我可以在方法中修改curPath,在结束函数调用时,变量修改仍然生效。
在2号问题中,我即使在函数中修改了ifExist,结束函数调用时,变量修改无效。
疑问:Java的参数传递方式?
解决:考虑下面三种情况:
1、
double a = 10;
void tripleValue(double x)
x = 3 * x;
tripleValue(a);
上述代码运行后,a的值保持不变。结论一:方法不能修改一个基础数据类型(数值型和布尔型)的参数
2、
Employee a = new Employee("july");
void changeName(Employee x )
x.name = "alice";
changeName(a);
上述代码运行后,a的name属性被修改为alice。结论二:方法可以改变一个对象参数的属性
3、
Employee a = new Employee("alice");
Employee b = new Employee("bob");
void swap(Employee p1 , Employee p2){
Employee temp = p1;
p1 = p2;
p2 = temp;
}
swap(a , b);
上述代码运行后,a仍然为alice,b仍然为bob。结论三:方法不能让对象参数引用一个新的对象
因此:Java的函数传参全为值传递。
在函数参数为基础数据类型时,方法参数得到参数值的拷贝;
当函数参数为对象时,方法参数得到参数地址的拷贝,但也不是对原对象的引用(引用:类似于对变量取别名,除了名字不一样外,其它均是一样的)。
[Java]_函数传参的疑惑与思考的更多相关文章
- 函数传参传的是啥的思考【java Python】
今天看<java 核心 卷1>的时候,作者提到了函数传参的问题,他提到,java传参,传的是值,而不是引用,然后,函数将要传的实参的值(如果实参是基本数据类型,那么就是值.如果实参是对象, ...
- java复用和传参
java复用和传参的三种方法总结: (1) 直接在一个类中调用函数 : 1 package test1; 2 3 public class a 4 { 5 public static void get ...
- Java的对象传参问题
在c/c++中对于传参类型,无外乎就是传值.传引用.传指针这几种.但在java中,由于没有指针类型,其传参的方式也发生了相应的变化.之前有搜过相关的知识点一直理解的是:Java的传参方式中主要有两种: ...
- 在Java中动态传参调用Python脚本
最近,又接触到一个奇葩的接口,基于老板不断催促赶时间的情况下,在重写java接口和复用已有的python脚本的两条路中选择了后者,但是其实后者并没有好很多,因为我是一个对python的认识仅限于其名称 ...
- pytest_函数传参和firture传参数request
前言为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数. 比如登录操作,大部分的用例都会先登录,那就需要把登录单独抽出来写个函数,其它用例全部的调用这个登陆函数就行. ...
- python函数传参是传值还是传引用?
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
- pytest十一:函数传参和 firture 传参数 request
为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数.比如登录操作,大部分的用例都会先登录,那就需要把登录单独抽出来写个函数,其它用例全部的调用这个登录函数就行.但是登录 ...
- 『Python × C++』函数传参机制学习以及对比
一.Python函数传参 在python中,函数传参实际上传入的是变量的别名,由于python内在的变量机制(名称和变量值相互独立),只要传入的变量不可变(tuple中的元素也要是不可变的才行),那么 ...
- JS——变量和函数的预解析、匿名函数、函数传参、return
JS解析过程分为两个阶段:编译阶段.执行阶段.在编译阶段会将函数function的声明和定义都提前,而将变量var的声明提前,并将var定义的变量赋值为undefined. 匿名函数: window. ...
随机推荐
- Replace JSON.NET with Jil JSON serializer in ASP.NET Web API
I have recently come across a comparison of fast JSON serializers in .NET, which shows that Jil JSON ...
- SGU 176 【带上下界的有源汇的最小流】
---恢复内容开始--- 题意: 给了n个点,m条有向边. 接下来m行,每条边给起点终点与容量,以及一个标记. 标记为1则该边必须满容量,0表示可以在容量范围内任意流. 求: 从源点1号点到终点n号点 ...
- (转)windows下配置nginx+php环境
原文地址 http://www.cnblogs.com/huayangmeng/archive/2011/06/15/2081337.html 刚看到nginx这个词,我很好奇它的读法(engine ...
- 菜鸟-手把手教你把Acegi应用到实际项目中(5)
在实际企业应用中,用户密码一般都会进行加密处理,这样才能使企业应用更加安全.既然密码的加密如此之重要,那么Acegi(Spring Security)作为成熟的安全框架,当然也我们提供了相应的处理方式 ...
- Android——显示单位px和dip以及sp的区别
dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素.d ...
- Android双击Back退出应用
前言 在app主界面点击back时,通常有以下几种方式进行退出 单击即退出 弹出确认Dialog 再次点击退出程序 个人最喜欢方式3,相比于方式2,不需要再把手指移动到屏幕中央点击Dialog,相比于 ...
- jdk分析之String
public class StringDemo01 { public static void main(String[] args) { String s1 = new String(" ...
- Oracle 启动状态解说
oracle 启动状态由nomount-mount-open 一. nomount状态下操作 08:09:49 idle> startup nomount; ORACLE instance st ...
- Cocos2dx3.0过渡篇 各种遍历与范围for语句的使用【转】
1.CCArray的遍历看到这里,有些人又按耐不住的要举起西瓜刀了:你不是说3.0beta后已经没有CCArray这货了吗?现在又拿出来作甚?其实我也很无辜,CCArray确实是没了,但在某个不为人知 ...
- NOIP总结
拿到题目先写裸的暴力,暴力一定要写对,没想出正解有暴力垫底,想出了正解也可以拿来拍 过了样例之后一定要造数据测,数据越坑越好 一定要造极限数据,哪怕造不知道答案的数据都行,主要是检测RE和TLE,正确 ...