Java基础
大约 1 分钟
1. 八大基本数据类型
- boolean/1
- byte/8
- char/16
- short/16
- int/32
- float/32
- long/64
- double/64
基本类型都有对应的包装类型,在使用的时候,Java会自动的装箱和拆箱
Integer x = 1; // 装箱
int y = x; // 拆箱
1.1 缓冲池
基本类型对应的缓冲池如下:
- boolean:true、false
- byte:all
- short:[-128 ... 127]
- int:[-128 ... 127]
- char:[\u0000 ... \u007F]
对于缓冲池内的对象创建有以下规则:
new Integer(100)
多次调用会创建一个新对象Integer.valueOf(100)
多次调用会使用缓冲池的对象,如果两个对象都用了缓冲池的内容,此时==
会判断为true
// 缓冲池内
Integer m = 100;
Integer n = 100;
System.out.println(m == n); // true
// 缓冲池外
Integer m = 323;
Integer n = 323;
System.out.println(m == n); // false
1.2 String
1.2.1 Final声明
String声明为final类型,所以无法被继承,而内部的值char也声明为final,所以无法改变,这样做有以下优点:
- String可以缓存在堆中
- Hash值可以缓存
- 线程安全
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
private final char value[];
...
}
1.2.2 String、StringBuffer、StringBuilder
可变性 | 线程安全 | |
---|---|---|
String | 不可变 | 安全 |
StringBuffer | 可变 | 不安全 |
StringBuilder | 可变 | 安全,使用synchronized同步 |
1.2.3 缓冲池
类似Int中缓冲池的概念,String也有类似的概念,其中=
和intern()
创建的对象都会在字符串常量池中引用,new
则不会
String s1 = new String("aaa");
String s2 = new String("aaa");
System.out.println(s1 == s2); // false
String s3 = s1.intern();
System.out.println(s1.intern() == s3); // true
String s4 = "bbb";
String s5 = "bbb";
System.out.println(s4 == s5); // true