0
点赞
收藏
分享

微信扫一扫

写面试题中遇到的问题(9)

东方小不点 2022-01-31 阅读 24

本文写给正在努力的自己,努力的补基础知识,五道题一篇(今天有点累,题目均比较简单)

ps:我把答案都放在解析下面了

  1. 先来道简单的题目,以下代码输出为多少?
public class Demo3 {
    static int a = 1;

    public static void main(String[] args) {
        int a = 10;
        a++;
        Demo3.a++;
        System.out.println("a:" + a + "   Demo.a:" + Demo3.a);
    }
}

初识想法:各变各的

解析:第一个a和第二个a都开辟了新的地址值,所以在调用的时候各不相关,你变你的,我变我的

答案:a:11 Demo.a:2

  1. 以下代码输出为多少?
 public static void main(String[] args) {
        StringBuffer a = new StringBuffer("A");
        StringBuffer b = new StringBuffer("B");
        operate(a, b);
        System.out.println(a + "." + b);
    }

    static void operate(StringBuffer x, StringBuffer y) {
//        x = y;
        x.append(y);
        y = x;
    }

初识想法:x和y的值变了,跟我a,b有什么关系?

解析:StringBuffer不是基本类型,所以传递是引用传递,上一篇我们讲过,如果是引用传值(又称地址传值),如果使用了=就代表新开辟了一个空间来存储新的值,也就是一个(引用传递)参数a通过=改变了数据空间(如new或者赋值为null),编译解析器会将该参数解析为一个与a同类型同名的局部变量,原来的引用则会在此方法中消失
我们通过他的哈希值来验证这个说法:
在这里插入图片描述
但是!要注意的是通过append方法是在该地址值的基础上更改其中的值,所以这个时候a和x指向同一个地址值我们也用打印哈希值的方法来验证这个说法
在这里插入图片描述

  1. 鼠标没电了,剩下的两道题明天补
举报

相关推荐

0 条评论