解决方案 »

  1.   

    字符串比较,常量池,参数传递,Java7版switch,各Collection对null的处理,try catch finally机制
    一看就知道这公司目的很明确,招熟练工累死你,并且从这个难度来看,进这样的公司没前途
      

  2.   

    我说说javascript那两题吧
    1. focus on 函数声明和函数表达式的区别,解析器对待它们的加载策略是不同的。
    具体来说函数声明会提前加载好,而表达式要js走到它那一行才加载。
    所以jumpp; 是未定义的变量,而speak();可以console出来。
    2.有点蛋疼,明知道两等号在js里面不可靠就尽量避开好了,我们组严厉禁止==出现。
    答案不打了,建议自己测试就好,另外,undefined也可以被赋值,所以...更无聊的问题,算了,到此为止。
      

  3.   

    普华永道还有做开发实施的?不是早就卖给IBM了么?这类试题太基础了,招的不是实习生就是初级程序员,而且JDK7以后,case逻辑已经可以支持字符类型了,还在考原来老的JDK的case比较,这些题目没有太多参考价值
      

  4.   

    刚学java小白一枚,请哪位仁兄解释下第一题为什么value + "World" == “HelloWorld” 的输出结果是false。
      

  5.   

    因为“==”比较的是字符串的地址值+字符串的内容。只有两个都相等的时候才会为ture,当把之前的value的地址值传到方法join时,再进行操作,value+="World";  这时其实是新创建了一个Sring,与常量池的HelloWorld已经不同了,所以地址值是不同的。
      

  6.   

    因为“==”比较的是字符串的地址值+字符串的内容。只有两个都相等的时候才会为ture,当把之前的value的地址值传到方法join时,再进行操作,value+="World";  这时其实是新创建了一个Sring,与常量池的HelloWorld已经不同了,所以地址值是不同的。
    我稍微测试了一下String value = "Hello";
    boolean a;
    a= (value + "World" == "HelloWorld");
    boolean b =("Hello" + "World" == "HelloWorld");
    System.out.println(a+"\t"+b);输出的结果为:false       true
    可见方法join的存在是无关紧要的,按你说的道理,应该是变量value与常量直接相加后,所得到的结果与常量池“HelloWorld”的地址值不同——你看是不是这样?
    另外有什么办法可以看到变量的地址值?
      

  7.   

    我想申明以下,这是技术讨论贴,如果觉得太肤浅就不要发些与技术无关的言论,因为这对技术讨论没有任何帮助,csdn不是你廉价吐槽的地方IT MAN
      

  8.   

    Q1
    true  编译器自动优化  将字符串常量先相加
    false 地址不等
    hello 调用完  value本身没改变  仍然指向的HelloQ2
    c 传什么都是c  因为没有break;Q3
    Hashtable 不允许空key和空valueQ4
    2 return语句后  再对栈中的数据做操作是无效的我觉得题出的很好  考验的是一个人的细心程度  程序员就需要细心
      

  9.   

    我想申明以下,这是技术讨论贴,如果觉得太肤浅就不要发些与技术无关的言论,因为这对技术讨论没有任何帮助,csdn不是你廉价吐槽的地方IT MAN
    我只是没具体说而已,上面每一个内容对应一道题,你搜索一下不就知道了,难道要别人把答案全部详详细细像教科书一样写出来才叫技术讨论?而且我说的是客观事实,被你说得倒变成主观吐槽了?
      

  10.   

    因为“==”比较的是字符串的地址值+字符串的内容。只有两个都相等的时候才会为ture,当把之前的value的地址值传到方法join时,再进行操作,value+="World";  这时其实是新创建了一个Sring,与常量池的HelloWorld已经不同了,所以地址值是不同的。
    兄弟,可以编译下这个类再用反编译工具看下,会发现不同。
    虚拟机在编译时会比较“智能”的预编译下。
    System.out.println("Hello" + "World" == "HelloWorld");
    这句话在编译后直接为System.out.println(true);
      

  11.   


    你可以去试试代码, finally是一定会执行的,不管有没有return。
      

  12.   


    你可以去试试代码, finally是一定会执行的,不管有没有return。会执行  但是返回的一定是执行前的
      

  13.   


    你可以去试试代码, finally是一定会执行的,不管有没有return。
    finally肯定会执行,但finally中的操作是不会影响到return的栈数据的。
      

  14.   

    因为“==”比较的是字符串的地址值+字符串的内容。只有两个都相等的时候才会为ture,当把之前的value的地址值传到方法join时,再进行操作,value+="World";  这时其实是新创建了一个Sring,与常量池的HelloWorld已经不同了,所以地址值是不同的。
    我稍微测试了一下String value = "Hello";
    boolean a;
    a= (value + "World" == "HelloWorld");
    boolean b =("Hello" + "World" == "HelloWorld");
    System.out.println(a+"\t"+b);输出的结果为:false       true
    可见方法join的存在是无关紧要的,按你说的道理,应该是变量value与常量直接相加后,所得到的结果与常量池“HelloWorld”的地址值不同——你看是不是这样?
    另外有什么办法可以看到变量的地址值?打印  hashCode()
      

  15.   

    因为“==”比较的是字符串的地址值+字符串的内容。只有两个都相等的时候才会为ture,当把之前的value的地址值传到方法join时,再进行操作,value+="World";  这时其实是新创建了一个Sring,与常量池的HelloWorld已经不同了,所以地址值是不同的。
    我稍微测试了一下String value = "Hello";
    boolean a;
    a= (value + "World" == "HelloWorld");
    boolean b =("Hello" + "World" == "HelloWorld");
    System.out.println(a+"\t"+b);输出的结果为:false       true
    可见方法join的存在是无关紧要的,按你说的道理,应该是变量value与常量直接相加后,所得到的结果与常量池“HelloWorld”的地址值不同——你看是不是这样?
    另外有什么办法可以看到变量的地址值?第一个false是因为value是String类型的,存放在堆中,value+"World"会先在内存中开辟空间才能保存结果,而且“Hello”+"World",两者原本就存放在常量池中,所以相加后还是存在常量池,所以地址相等。
      

  16.   

    因为“==”比较的是字符串的地址值+字符串的内容。只有两个都相等的时候才会为ture,当把之前的value的地址值传到方法join时,再进行操作,value+="World";  这时其实是新创建了一个Sring,与常量池的HelloWorld已经不同了,所以地址值是不同的。
    我稍微测试了一下String value = "Hello";
    boolean a;
    a= (value + "World" == "HelloWorld");
    boolean b =("Hello" + "World" == "HelloWorld");
    System.out.println(a+"\t"+b);输出的结果为:false       true
    可见方法join的存在是无关紧要的,按你说的道理,应该是变量value与常量直接相加后,所得到的结果与常量池“HelloWorld”的地址值不同——你看是不是这样?
    另外有什么办法可以看到变量的地址值?第一个false是因为value是String类型的,存放在堆中,value+"World"会先在内存中开辟空间才能保存结果,而且“Hello”+"World",两者原本就存放在常量池中,所以相加后还是存在常量池,所以地址相等。最主要的原因还是因为value是在堆中,在编译期是无法确定的,所以必须新创建一个对象。如果用value.intern()。就和第二个结果一样了。