【Java】——常见问题02

版权声明:希望各位能遵守各自内心的原则 https://blog.csdn.net/weixin_40918067/article/details/81975373

【问题1】在Java中,一个变量重新new,重新分配空间进行复用,和重新定义一个变量使用哪个好?

解答:

1、看上去两者并没有什么区别,其实是有一个内存分配的问题;

2、方式1,对于SimpleDateFormat的分配空间只分配了一个;方式二,分配了两个SimpleDateFormat;方法一和方法二对比,方式一节省了一个内存;

【问题2】System.out.println(((Base)s).Foo);这个语法里面是什么意思?初学者没学过这种语法三个括号,请老手帮忙解答一下这三个括号这种语法什么意思,输出结果我知道是 输出父类的FOO;

                                       

解答:

1、System.out.println(((Base)s).Foo);其括号和java的装箱和拆箱原理有关系;
这段输出可以等同于这样的代码段:

       

关于装箱和拆箱的原理可以这样理解:
        Integer是int的封装类
        Integer类型的变量被int类型的变量赋值,是一种装箱行为。(小转大)
        int类型的变量被Integer类型的变量赋值,是一种拆箱行为。(大转小)

解析:

1、括号的作用是改变优先级,括号最深【(Base)s.Foo】的最先被求值

2、先得到s.Foo,再把s.Foo字段再转换为Base

3、((Base)s).Foo是先把s整体转换为Base,再得到Foo字段。

4、static的字段:Foo,没有继承关系;所以对象是哪个类型,Foo就是哪个类型。

5、System.out.println(((Base)s).Foo);
      相当于
                  Base temp = (Base)s;
                  System.out.println(temp.Foo);

猜你喜欢

转载自blog.csdn.net/weixin_40918067/article/details/81975373