(1)JDK & JRE & JVM 的关系

  1. JDK
    JDK包含jre、java开发工具、java核心类库
  2. JRE
    jre是运行java程序的环境,包含java核心类库,和jvn的标准实现
  3. 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

  1. 都是final的不可以被继承
  2. String 不可变 StringBuffer,StringBuilder 长度可变
  3. String 重写了equals()方法和hashcode()方法
  4. StringBuffer 是线程安全的 StringBuilder是线程不安全的
  5. 在单线程下 StringBuffer和StringBuilder效率一样,再多线程下StringBuilder效率更高,因为StringBuffer在一些方法上加了同步synchronized 方式
  6. 字面直接声明的String 在编译期间都会优化为final声明的

(9) ‘+’ 和substring()

  1. ‘+’ 和 substring() 都会生成一个新的对象
  2. ‘+’ 和 substring() 都是在在堆中生成的对象 (没有在常量池所以不共享)
  3. ‘+’ 在编译期间会被优化为 append()方法

(10) 可以手动创建java.long.String 类么?可以使用么?为什么?

  1. 可以创建,但是不能被使用,因为类加载机制(双亲委派机制)
  2. 因为自定义的类的加载器为AppClassLoader.AppClassLoader加载器加载的时候需要先加载其父加载器,ExtClassLoader加载器,ExtClassLoader会在 jre/lib/ext 下去寻找 java.long.String 类, 此时找不到该类,则会调用ExtClassLoader的父加载器BootStrap加载器,在jre/lib下寻找,
    最终找到String类并且加载
  3. 这也就是类加载的委托机制