当前位置: 代码迷 >> J2SE >> 普华永道笔试题解决方法
  详细解决方案

普华永道笔试题解决方法

热度:167   发布时间:2016-04-23 20:19:30.0
普华永道笔试题
希望同学们看后,写输出的答案和解释原因(越详细越好)
Q1:

package com.victor.test;

public class TestMain {
public static void main(String[] args) {
String value = "Hello";
System.out.println("Hello" + "World" == "HelloWorld");
join(value);
System.out.println(value);
}

public static void join(String value) {
value+="World";
System.out.println(value=="HelloWorld");
}
}



Q2:

package com.victor.test;

public class TestMain2 {

public static void main(String[] args) {

System.out.println(getResult("a"));

}

public static String getResult(String str) {
String result = "defalut";
switch (str) {
case "a":
result = "a";
case "b":
result = "b";
default:
result = "c";
}
return result;
}
}



Q3:

package com.victor.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Set;


public class TestMain3 {
public static void main(String[] args) {

List<String> aList = new ArrayList<String>();
aList.add(null);

Set aset = new HashSet();
aset.add(null);

Map<String,String> aMap = new HashMap<String,String>();
aMap.put(null,null);

Hashtable<Object, Object> attributeTypes = new Hashtable<Object, Object>();

attributeTypes.put("String",null);

attributeTypes.put(null,null);


}

}



Q4:

package com.victor.test;

public class TestMain4 {
public static void main(String[] args) {

System.out.println(getValue());

}

public static int getValue(){
int i=1;
try {
throw new Exception();
} catch (Exception e) {
return ++i;
}finally{
++i;
System.out.println("finally : " + i);
}
}
}


javascript:
Q1:

var foo = function() {
 speak();
 jumpp;
 var jump = function jumpp(){
  console.log('how high');
 }
 return;
 function speak(){
  console.log('howdy');
 }
};

foo();


Q2:

console.log("" == 0);
console.log(0 == '0');
console.log(false == 'false');
console.log(false == '0');
console.log(false == null);
console.log(null == undefined);


暂时先发这些,希望知道原理的童鞋写出心得供大家学习,谢谢了。
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

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

因为“==”比较的是字符串的地址值+字符串的内容。只有两个都相等的时候才会为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()。就和第二个结果一样了。
  相关解决方案