您的位置:首页 > 其它

J2SE学习笔记:J2SE重点难点,第一讲String

2013-10-17 00:16 204 查看
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 右边一个是常量一个是变量会在堆中生成一个新的对象。
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: