java不常见的知识点

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产生大量的中间对象,相当浪费空间。

发布了50 篇原创文章 · 获赞 31 · 访问量 7363

猜你喜欢

转载自blog.csdn.net/qq_37685457/article/details/94445961