接下来一段日子,我们会为大家整理IT大厂招聘中常见的笔试题,并提供详尽的讲解。本期为第一期,大家可以赶快分享给自己的同学,大家一起备战秋招。

很多公司在笔试中,都会出现函数调用的程序运行题目,这类题目的考点,最终都会落到参数传递上。我们来看下面这道题。
class Values{
public int i = 15;
}
public class TestValue{
public static void main(String argv[]){
TestValue t = new TestValue();
t.first();
}
public void first(){
int i = 5;
Values v = new Values();
v.i = 25;
second(v, i);
System.out.println(v.i);
}
public void second(Values v, int i){
i = 0;
v.i = 20;
Values val = new Values();
v = val;
System.out.println(v.i + "," + i);
}
}
提问
Qustions
&
解答
Answers
问题:以上题目,运行结果是多少呢?
答案:
15 0
20
解析:
不知道各位同学做得怎么样?如果没做出来,说明你对java方法调用参数方面的知识点掌握得不够牢靠哦,要加强哦!
那么,这道题该如何解答呢?首先,让我们来回顾一下java方法调用参数的基础知识点。
Java中方法配有参数列表,我们在方法定义时设计好形参,在方法的调用阶段我们传递实参,参数的传递方式即值传递。
调用方法时,会把实参的值拷贝传递给形参,方法内部其实是在使用形参,所谓值传递,即当参数是基本类型时,传递参数的值,如传递a=1,真实传参时,把a变量的值1赋值给了形参。
当参数是引用数据类型,如对象、数组时,传递的是对象地址值。而形参实际上可看作是方法内部的一个局部变量,伴随方法的调用诞生,方法执行完毕弹栈而清除。对比其他方法内局部变量而言,形参不需要初始化,因为在方法被调用时,一定会先给形参赋值,其他同一般的方法内局部变量一致。
基本类型当做方法的形参时:
public static void main(String args[]){
int x = 1;
int y = 2;
max(x,y);
}
public int void max(int x ,int y)
1. main方法是程序入口,先分配实参(main函数内的局部变量x,y)的内存空间并初始化值1,2;
2. 再用max方法,将max方法压栈,并分配其形参的内存空间(max方法的x,y;由于是两个方法栈所以虽然都是x,y,但是没有冲突和影响);
3. 将实参的值赋给对应的顺序的形参(main的x值拷贝给max的x,main的y值拷贝个max的y);
4. 执行max方法体后弹栈释放形参的内存空间;
5. main函数继续执行,当main函数执行完毕释放内存。
基本类型&引用类型
基本类型
引用类型
以上即java函数调用的一般过程。作为实参,基本数据类型和引用数据类型最大的区别,就在于基本类型传的是值,引用数据类型传的是地址值。
再回头看所考的题目:
1.生成Test类型对象,调用first方法
2.first方法声明局部变量i:5
3.创造Value对象v,v的i属性:15
5.传入v的引用和局部变量的值给second方法的形参
4.v的i属性值改为25
6.second方法的形参值从传入的5改成了0,
形参v通过first生成的v对象的引用修改其属性从25改成20
7.second生成了一个自己的value类型的对象:val,i属性为:15
8.形参v的引用从first的v调整为second的val
9.输出second的i的属性为15second的形参为:0
10:first的v对象i属性为:20
总结
基本数据类型直接存放数据值本身,所以改的也是数据值本身。
引用数据类型不同之处在于,真正的数据并没有在栈区的变量中保存,而是在堆区里保存,所以,虽然也拷贝了副本,但二者指向的是同一块堆区。
引用数据类型就像是两人用同一个账户的银行卡,不论谁取钱都会影响同一个账户。
1)当使用基本数据类型作为方法的形参时,在方法体中修改形参不会影响实参的数值;
2)当使用引用数据类型作为方法的形参时,在方法体中修改形参指向的数据内容,会影响到实参变量的数值,因为形参变量和实参变量共享同一块堆区;
3)当使用引用数据类型作为方法的形参时,在方法体中修改形参变量的指向,不会影响到实参变量的数值,因为形参变量和实参变量分别指向不同堆区。
往期精选
就业凉了,地摊热了——最难就业季,你是凉是热?
敲黑板!
线性结构设计的知识要点
敲黑板!
经典查找算法的知识要点