java扫坑笔记(持续更新)

1、t!=(t=tail)这个的结果是什么,其中原t和tail的引用地址不相同。

答案:是true。

stack=3, locals=2, args_size=1
         0: ldc           #2                  // String 从常亮中取值到栈顶
         2: astore_1                          // 栈顶的值存放到第二个本地变量
         3: aload_1                            // 将第二个本地变量的引用值放到栈顶
         4: ldc           #3                  // String 1  从常亮中取值到栈顶
         6: dup                               // 复制栈顶元素并压倒栈顶
         7: astore_1                            // 栈顶元素保存到第二个本地变量
         8: if_acmpeq     11                    // 比较栈顶两个引用型值,如果相等跳转return
        11: return

2、对于下面的代码执行结果是怎么样的?

public class Son extends Father{

    public void myName(){
        System.out.println("son");
    }

    public static void main(String[] args) {
        Son sone = new Son();
        sone.call();
    }
}

class Father{
    protected void myName(){
        System.out.println("father");
    }

    public void call(){
        this.myName();
        Son son = new Son();
        son.myName();
    }
}

输出结果:

son

son

public class Son extends Father{

    public void myName(){
        System.out.println("son");
    }

    public static void main(String[] args) {
        Son sone = new Son();
        sone.call();
    }
}

class Father{
    private void myName(){
        System.out.println("father");
    }

    public void call(){
        this.myName();
        Son son = new Son();
        son.myName();
    }
}

结果是:

father:

son

  两个代码修饰符的不同,造成的结果不同的原因是对于调用私有方法使用的单独的

invokespecial指令,而对于调用已知推断出来不是私有的方法使用的是invokevirtual指令。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值