ToB企服应用市场:ToB评测及商务社交产业平台

标题: 牛客网刷Java记录第一天 [打印本页]

作者: 数据人与超自然意识    时间: 2023-10-8 21:43
标题: 牛客网刷Java记录第一天
第一题
下列程序输出啥?
  1. public class StringDemo{
  2.   private static final String MESSAGE="taobao";
  3.   public static void main(String [] args) {
  4.     String a ="tao"+"bao";
  5.     String b="tao";
  6.     String c="bao";
  7.     System.out.println(a==MESSAGE);
  8.     System.out.println((b+c)==MESSAGE);
  9.   }
  10. }
复制代码
解析:
做这道题之前,需要明白三个知识点:
我在做这道题的时候,在想这样一个问题:静态常量的字符串也是存在常量池中的吗?通过在idea中debug,验证了我的猜想:静态常量的字符串也是存在常量池中的。
于是,a==MESSAGE就是对的。
那么,b+c==MESSAGE呢?通过追踪源码可知,因为b+c是变量相加,所以在底层会创建一个StringBuilder类型的变量来存储b+c的结果,存好之后,又转换为String类型,这个String类型是由StringBuilder转化过来的,但是地址还是在堆中,所以它的地址也就和MESSAGE不同,那么结果也就是false。
答案:
true false
第二题
下列程序输出啥
  1. class Test {
  2.     public static void main(String[] args) {
  3.         System.out.println(new B().getValue());
  4.     }
  5.     static class A {
  6.         protected int value;
  7.         public A(int v) {
  8.             setValue(v);
  9.         }
  10.         public void setValue(int value) {
  11.             this.value = value;
  12.         }
  13.         public int getValue() {
  14.             try {
  15.                 value++;
  16.                 return value;
  17.             } finally {
  18.                 this.setValue(value);
  19.                 System.out.println(value);
  20.             }
  21.         }
  22.     }
  23.     static class B extends A {
  24.         public B() {
  25.             super(5);
  26.             setValue(getValue() - 3);
  27.         }
  28.         public void setValue(int value) {
  29.             super.setValue(2 * value);
  30.         }
  31.     }
  32. }
复制代码
解析:
这题考察try-catch和多态的动态绑定机制,还涉及了一点静态内部类。
必备知识:
回到题目,这道题用语言来描述会有点麻烦,大家可以了解一下我前面所说的必备知识,然后自己思考一下执行流程,一定要在idea中debug一下,只需要在main方法中打一个断点即可,看看整个程序的执行流程,以后再遇到类似的题目,基本没啥问题。
答案:
22 34 17

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4