JAVA常见基础题(持续整理)
2017-10-11 10:25
337 查看
1、String、StringBuffer、StringBuilder:
String、StringBuffer和StringBuilder的区别
关于String、StringBuilder以及StringBuffer
StringBuffer:
char[] value;
public synchronized StringBuffer replace(int start, int end, String str);
public synchronized String substring(int start);
public synchronized StringBuffer insert(int offset, Object obj);
StringBuilder :
char[] value;
public StringBuilder replace(int start, int end, String str);
public StringBuilder append(Object obj);
public StringBuilder insert(int index, char[] str, int offset,int len)
String:
2、intern,str.intern()的作用在常量池查找是否存在内容相同的字符串,存在直接返回地址:
通过反编译深入理解Java String及intern
测试1:
测试2,在jdk7及之后,Hotspot将常量池由永生代移到元空间,
str2.intern()到常量池查找是否存在于str2相同的字符串,存在时直接返回引用
不存在时,不再新建一个字符串,将str2的引用存于常量池中,然后返回该引用
str1会到常量池查找“str01”,返回的是引用
假如不把String ss = “str01”;注释掉将打印false true false,而不是true true true
(注: 将String str2 = new String(“str01”)则使用该法解释不通,仍需要继续研究)
3、String中==、+、static的测试,实质是考察方法编译运行的处理细节:
来源:通过反编译深入理解Java String及intern(反编译代码那部分讲得非常好)
解释:
str2在编译时直接拼接的字符串;
str3,因为baseStr是变量,与“01”相加的操作在jvm运行时执行;
str4,baseFinalStr是常量,不可变,在编译时直接拼接的字符串;
str5,在常量池存在”baseStr01”,intern后直接返回其引用;
关于str3=baseStr + “01”;首先 是生成对象new StringBuilder() ,然后从常量池获得“01”,再调用StringBuilder的append,再调用String的toString方法
3、public、protected、default、private的范围:
public:包内包外
protected:包内+(包外的继承关系)
default:包内
private:同一类中
4、接口和抽象类:
知乎 接口和抽象类有什么区别?
Java抽象类与接口的区别
String、StringBuffer和StringBuilder的区别
关于String、StringBuilder以及StringBuffer
StringBuffer:
/*The value is used for character storage. */
char[] value;
public synchronized StringBuffer replace(int start, int end, String str);
public synchronized String substring(int start);
public synchronized StringBuffer insert(int offset, Object obj);
StringBuilder :
/*The value is used for character storage. */
char[] value;
public StringBuilder replace(int start, int end, String str);
public StringBuilder append(Object obj);
public StringBuilder insert(int index, char[] str, int offset,int len)
String:
/** The value is used for character storage. */ private final char value[];
2、intern,str.intern()的作用在常量池查找是否存在内容相同的字符串,存在直接返回地址:
通过反编译深入理解Java String及intern
测试1:
public void runInternTest1(){ String str1 = "string"; String str2 = new String("string"); String str3 = str2.intern(); System.out.println(str1==str2);//#1 System.out.println(str1==str3);//#2 System.out.println(str2==str3); } /*jdk7打印结果false,true,false*/
测试2,在jdk7及之后,Hotspot将常量池由永生代移到元空间,
str2.intern()到常量池查找是否存在于str2相同的字符串,存在时直接返回引用
不存在时,不再新建一个字符串,将str2的引用存于常量池中,然后返回该引用
str1会到常量池查找“str01”,返回的是引用
假如不把String ss = “str01”;注释掉将打印false true false,而不是true true true
(注: 将String str2 = new String(“str01”)则使用该法解释不通,仍需要继续研究)
public void runInternTest3(){ // String ss = "str01"; String str2 = new String("str")+new String("01"); String str3 = str2.intern(); String str1 = "str01"; System.out.println(str1==str2);//#7 System.out.println(str1==str3); System.out.println(str2==str3); } /*打印true true true*/
3、String中==、+、static的测试,实质是考察方法编译运行的处理细节:
来源:通过反编译深入理解Java String及intern(反编译代码那部分讲得非常好)
解释:
str2在编译时直接拼接的字符串;
str3,因为baseStr是变量,与“01”相加的操作在jvm运行时执行;
str4,baseFinalStr是常量,不可变,在编译时直接拼接的字符串;
str5,在常量池存在”baseStr01”,intern后直接返回其引用;
关于str3=baseStr + “01”;首先 是生成对象new StringBuilder() ,然后从常量池获得“01”,再调用StringBuilder的append,再调用String的toString方法
public void runInternTest2(){ String baseStr = "baseStr"; final String baseFinalStr = "baseStr"; String str1 = "baseStr01"; String str2 = "baseStr"+"01"; String str3 = baseStr + "01"; String str4 = baseFinalStr+"01"; String str5 = new String("baseStr01").intern(); System.out.println(str1 == str2);//#3 System.out.println(str1 == str3);//#4 System.out.println(str1 == str4);//#5 System.out.println(str1 == str5);//#6 System.out.println(str1 == "baseStr"+"01");//和#3是一样的 System.out.println(str1 == baseStr+"01");//和#4是一样的 /*jdk7运行结果,true false true true true false*/ }
3、public、protected、default、private的范围:
public:包内包外
protected:包内+(包外的继承关系)
default:包内
private:同一类中
4、接口和抽象类:
知乎 接口和抽象类有什么区别?
Java抽象类与接口的区别
相关文章推荐
- 2017常见的50道java基础面试题整理(附答案)
- 【JAVA 基础】JAVA常见异常集锦(持续更新)
- java常见面试基础问题整理
- 黑马程序员_java基础常见问题100例收集(持续更新,有经典和优秀的欢迎推荐)
- Java基础:技术人常见十大代码错误整理
- 黑马程序员--Java基础常见异常整理
- JAVA基础:JAVA几个常见错误简析
- Java 基础巩固5:全面理解自动装拆箱及常见风险点
- JAVA基础知识整理记录
- Java基础知识常见面试题
- BTA 常问的 Java基础40道常见面试题及详细答案
- 【Java基础】浅谈常见设计模式
- java基础整理の自动装箱雨拆箱(包装类)
- python一些基础且常用的脚本整理(持续补充)
- java基础整理十三(String)
- java基础技术点整理
- Java基础知识强化99:Java 常见异常及趣味解释
- java基础知识总结2三种常见的结构
- java基础知识记录--流行框架与新技术(摘自张孝祥整理java面试题)
- Java知识点整理:第一章:基础知识梳理