Java常见笔试面试题目深度剖析
字符串相关(String)
异常相关(Exception)
反射相关(Reflection)动态代理
线程相关(Thread)
多态相关(Polymorphism)
数组相关(Array)
集合相关(Collection)
设计模式相关(DesignPattern)
相等性相关(equals,hashcode)
方法重写相关(Override)
Jsp相关(JSP)
Servlet相关(Servlet)
package cn.bishi;
/**
* 问题:执行完第三句、第四句、第五句内存中有几个对象?
* 程序的打印结果是什么?
* 答案:第三句之后内存中有2个对象,堆中一个,静态区StringPool中一个
* 第四句之后还是两个,s1直接指向了静态区StringPool中
* 第五局之后有三个对象,堆中又多了一个常量。最终指向的仍旧是静态区StringPool的对象
*
*/
public class StringTest {
public static void main(String[] args){
String s = new String("abc");
String s1= "abc";
String s2 = new String("abc");
System.out.println(s == s1); //false 引用指向的地址不同
System.out.println(s == s2); //false 引用指向的地址不同
System.out.println(s1 == s2); //false 引用指向的地址不同,S1在堆中,s2在StringPool中
//intern的作用是返回StringPool里面对象的地址。
System.out.println(s == s.intern()); //false
System.out.println(s1 == s1.intern()); //true
System.out.println(s.intern() == s2.intern()); //true
String hello = "hello";
String hel = "hel";
String lo = "lo";
System.out.println(hello == "hel" + "lo"); //true 右边都在常量池中所以会去和"hello"进行equals
System.out.println(hello == "hel" + lo); //false 右边一个是常量一个是变量会在堆中生成一个新的对象。
}
}