java 基础知识点整理(一)
(1)JDK & JRE & JVM 的关系
- JDK
JDK包含jre、java开发工具、java核心类库 - JRE
jre是运行java程序的环境,包含java核心类库,和jvn的标准实现 - JVM
是java虚拟机,实现java跨平台最核心的部分(2)跨平台
 
因为jvm运行的是java编译后的字节码文件,因为jvm可以在多个平台安装,所以字节码文件就可以在多个平台的jvm上面运行.从而实现一次编译到处运行
(3)基础数据类型
 整型:    byte、short、int、long
 浮点型:double、float
 逻辑型:boolean
 字符型:char
 长度
 byte(1) 2的-7次方 到2的7次方-1
 short(2) 2的-15次方 到 2的 15 次方-1
 int(4)
 long(8)
 double(8)
 float(4)
 boolean(1/8)
 char(2)               
(4)自动装箱,自动拆箱
自动装箱:
1  | Integer i= 100; // 基本类型自动装箱为包装类,编译器会优化为 Integer i = new Integer(100);  | 
自动拆箱
1  | int i =new Integer(100); //编译集会优化为 int i =new Integer(100).intValue();  | 
(5) Integer.intValue()
integer 定义的对象,范围在-128带127会被缓存起来,所以在这个范围内的integer进行判断相等会等于true,因为是同一对象
(6) == 和 equals 的区别
1.== 是判断对象地址是否相等,equals没在重写的情况下也是判读对象地址等同于==
2.不通对象的地址是不一样的,如果相比较两个对象的内容是否一样则需重写equals方法
(7)hashcode()和 equals()的区别
  equals()必须满足一下几点:
1.自反性  a.equals(a) =true
2.对称性  a.equals(b) =true  b.equals(a) =true
3.一致性  a.equals(a) 多次调用永远等于true
4.对于null判断始终等于false
hashcode()的实现方式和操作系统有关,姑且认为是获取对象的地址。
重写equals()方法必须重写hashcode(),因为在hash数据结构添加数据的时候,需要先通过hashcode()方法查找存储的位置(链地址发),如果该位置不存在则插入,如果该位置已经拥有对象则,需要通过equals()方法判断对象是否相同,如果相同则替换,如果不通则在改对象后面进行存储。
1.两个相同的对象hashcode 必须相同,hashcode相同的对象,对象之间可能不通
 2. hashcode()不同,则对象也不相同
- 如果之重写了equals()方法会出现什么效果?
答案:两个相同的对象hashcode不同,hashmap的key会放入相同的对象 
(8) String & StringBuffer & StringBuilder
- 都是final的不可以被继承
 - String 不可变 StringBuffer,StringBuilder 长度可变
 - String 重写了equals()方法和hashcode()方法
 - StringBuffer 是线程安全的 StringBuilder是线程不安全的
 - 在单线程下 StringBuffer和StringBuilder效率一样,再多线程下StringBuilder效率更高,因为StringBuffer在一些方法上加了同步synchronized 方式
 - 字面直接声明的String 在编译期间都会优化为final声明的
 
(9) ‘+’ 和substring()
- ‘+’ 和 substring() 都会生成一个新的对象
 - ‘+’ 和 substring() 都是在在堆中生成的对象 (没有在常量池所以不共享)
 - ‘+’ 在编译期间会被优化为 append()方法
 
(10) 可以手动创建java.long.String 类么?可以使用么?为什么?
- 可以创建,但是不能被使用,因为类加载机制(双亲委派机制)
 - 因为自定义的类的加载器为AppClassLoader.AppClassLoader加载器加载的时候需要先加载其父加载器,ExtClassLoader加载器,ExtClassLoader会在 jre/lib/ext 下去寻找 java.long.String 类, 此时找不到该类,则会调用ExtClassLoader的父加载器BootStrap加载器,在jre/lib下寻找,
最终找到String类并且加载 - 这也就是类加载的委托机制
 











