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

来源:互联网 发布:求购淘宝小号 编辑:程序博客网 时间:2024/06/06 19:41

Java常见笔试面试题目深度剖析

字符串相关(String

异常相关(Exception

反射相关(Reflection)动态代理

线程相关(Thread

多态相关(Polymorphism

数组相关(Array

集合相关(Collection

设计模式相关(DesignPattern

相等性相关(equalshashcode

方法重写相关(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());  //falseSystem.out.println(s1 == s1.intern()); //trueSystem.out.println(s.intern() == s2.intern()); //trueString hello = "hello";String hel = "hel";String lo = "lo";System.out.println(hello == "hel" + "lo"); //true  右边都在常量池中所以会去和"hello"进行equalsSystem.out.println(hello == "hel" + lo); //false 右边一个是常量一个是变量会在堆中生成一个新的对象。}}