从一道面试题看你对从一道面试题看你对java的理解程度的理解程度
主要给大家介绍了关于如何从一道面试题看你对java的理解程度的相关资料,文中通过示例代码介绍的非常详细,对大家的
学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧
简介简介
最近有点忙,很久没更新文章了,后面会慢慢恢复...回顾正题
最近看到一篇文章,关于一道面试题,先看一下题目,如下:
public static void main(String[] args) {
Integer a = 1;
Integer b = 2;
System.out.printf("a = %s, b = %s", a, b);
swap(a, b);
System.out.printf("a = %s, b = %s", a, b);
}
public static void swap(Integer a, Integer b) {
// TODO 实现
}
有人可能在没经过仔细考虑的情况下,给出以下的答案
// 特别提醒,这是错误的方式
// 特别提醒,这是错误的方式
// 特别提醒,这是错误的方式
public static void swap(Integer a, Integer b) {
// TODO 实现
Integer temp = a;
a = b;
b = temp;
}
很遗憾,这是错误的。重要的事注释三遍
那么为什么错误,原因是什么?
想要搞清楚具体的原因,在这里你需要搞清楚以下几个概念,如果这个概念搞清楚了,你也不会把上面的实现方法写错
形参和实参
参数值传递
自动装箱
所以,上面的问题先放一边,先看一下这几个概念
形参和实参形参和实参
什么是形参?什么是实参?概念上的东西,参考教科书或者google去吧,下面直接代码说明更加明显
public void test() {
int shi_can = 0;
testA(shi_can);
}
public void testA(int xing_can) {
}
注:为了清楚的表达意思,我命名的时候并没有按照注:为了清楚的表达意思,我命名的时候并没有按照java的驼峰规则命名,这里只是为了演示的驼峰规则命名,这里只是为了演示
通过上面的代码很清楚的表达形参和实参的概念,在调用testA时,传递的就是实参,而在testA方法签名中的参数为形参
从作用域上看,形参只会在方法内部生效,方法结束后,形参也会被释放掉,所以形参是不会影响方法外的
值传递和引用传递值传递和引用传递
值传递:传递的是实际值,像基本数据类型
引用传递:将对象的引用作为实参进行传递
java基本类型数据作为参数是值传递,对象类型是引用传递
实参是可以传递给形参的,但是形参却不能影响实参,所以,当进行值传递的情况下,改变的是形参的值,并没有改变实参,所以无论是
引用传递还是值传递,只要更改的是形参本身,那么都无法影响到实参的。对于引用传递而言,不同的引用可以指向相同的地址,通过形
参的引用地址,找到了实际对象分配的空间,然后进行更改就会对实参指向的对象产生影响
额,上面表述,可能有点绕,看代码
// 仅仅是一个java对象
public class IntType {