1、变量进制表示:
二进制:以0b开头
八进制:以0开头
十六进制:以0x开头
2、方法区里存放什么
源代码
类信息
静态变量
静态方法
字符串常量池
3、Integer的缓存机制
Integer在[-128,127]之间的数会缓存,实际是在系统初始化的时候就会创建一个cache数组存放-128到127,其类型为Integer。在调用valueOf的时候,首先会看是否在-128到127之间,如果在就直接从cache数组里取。
4、String与StringBuilder与StringBuffer
String类型的字符串是不可改变的,而StringBuilder和StringBuffer的字符串是可改变的,但StringBuilder是线程不安全的所以性能更高一些,StringBuffer是线程安全的性能相对低一些。
①String的存储机制:
String a = "abc";
String b = "abc";
此时a和b是相等的,因为在执行String a = "abc";的时候,会将abc这个字符串放进常量池里,然后String b = "abc";在执行的时候回去字符串常量池里找是否有abc这个字符串,如果找到了,b就直接指向这个abc字符串。
②String和new String()的区别:
String s1 = "abc";
String s2 = new String("abc");
此时,s1和s2不是相等的。因为s1首先会判断字符串常量池是否有abc这个字符串,如果有,会直接使用常量池里的abc,如果没有会将abc放进常量池,并让s1指向abc这个字符串。 但s2的过程是,在堆里新建一个对象,給这个对象的值赋值为abc。
③StringBuilder与String:
StringBuilder与String的区别是:String里存放的是不可改变的字符数组,其源码是private final char[]。而StringBuilder是可改变的字符数组,其源码是char[]。重要的是在涉及到字符串拼接问题的时候,切记必须使用StringBuilder,而不能使用String,因为String产生大量的中间对象,相当浪费空间。