master
Omooo 5 years ago
parent 48c87e35ef
commit 2d2a20bbe7
  1. 8
      blogs/Java/Long.md
  2. 17
      blogs/Java/String.md
  3. 0
      blogs/集合/HashMap.md

@ -0,0 +1,8 @@
---
Long
---
为什么使用 Long 时,大家推荐多使用 valueOf 方法,少使用 parseLong 方法?
因为 Long 本身有缓存机制,缓存了 -128 到 127 范围内的 Long,valueOf 方法会从缓存中去拿值,如果命中缓存,会减少资源的开销,parseLong 方法就没有这个机制。

@ -261,6 +261,23 @@ System.out.println(str2==str1);
1. String、StringBuilder、StingBuffer 的区别? 1. String、StringBuilder、StingBuffer 的区别?
2. String name = "Omooo" 和 String name = new String("Omoo") 、String name = new String("Omoo") + "o" 的区别以及分别创建了多少个对象? 2. String name = "Omooo" 和 String name = new String("Omoo") 、String name = new String("Omoo") + "o" 的区别以及分别创建了多少个对象?
#### 更新
String 不可变性的理解?
往往一般的回答里只会说道 String 被 final 修饰就完事了。其实有两点:
1. String 被 final 修饰,说明 String 类绝不可能被继承了,也就是说任何对 String 的操作方法,都不会被继承覆写
2. String 中保存数据的是一个 char 的数组 value,value 也是被 final 修饰的,也就是说 value 一旦被赋值,内存地址是绝对无法被修改的,而且 value 的权限是 private 的,外部绝对访问不到,String 也没有开放出可以对 value 进行赋值的方法,所以说 value 一旦产生,内存地址就根本无法被修改
因为 String 具有不变性,所以 String 的大多数操作方法,就会返回新的 String,如下面这种写法是不对的:
```java
String str = "2333";
// 无法替换,要改成: str = str.replace("2", "3");
str.replace("2", "3")
```
#### 参考 #### 参考
[String 源码浅析(一)](https://juejin.im/post/5c2588d8f265da6110371d2b) [String 源码浅析(一)](https://juejin.im/post/5c2588d8f265da6110371d2b)

Loading…
Cancel
Save