1.JDK,JRE,JVM
JDK:java开发工具包,偏向程序员
JRE:java运行环境,偏向用户
JVM:java虚拟机,用于编译解释
2.equals与“==”
equals本质上就是==,因为java.lang.String类重写了equals方法,所以如果两个字符串对象包含有相同的内容它就返回true,但是==只有他们的引用地址相同时才返回true。
3.hashcode相同,equals也不一定相同
1.hashcode用来储存地址,他的存在用于查找的快捷,如hashMap
2.如果两个对象相同,就是适用于equals方法,那么两个对象的hashcode一定要相同
3.如果equals方法被重写,那么hascode也尽量重写,并且产生hashcode使用的对象,一定要和equals方法中使用的一致,否则就会违反第二点。重写hashcode和equals可保证hashMap键唯一性
4.两个对象的hashcode相同,并不一定代表对象就相同,也就不一定适用于equals方法,只能够说明这两个对象再散列存储结构中,如hashtable,他们“存放在同一个篮子里”
4.String,StringBuffer,StringBuilder的区别
String声明的是不可变对象,其他两个是可变的(String源码可知用final修饰)
StringBuffer:同步,线程安全,性能低,建议多线程使用
StringBuilder:异步,线程不安全,性能高,建议单线程使用
常见的字符串拼接应选择StringBuilder,比String快千百倍。
5.String str = “i” 与 String str = new String(“i”)
String str = “i” Java虚拟机将其分配到常量池中
String str = new String(“i”)会被分配到堆内存中,创建了两个对象,但如果再执行一遍就是创建一个对象,因为常量池中已经有了。
6.接口与抽象类的区别
1.抽象类可以有默认的方法实现,接口不能有默认的方法实现
2.抽象类可以有构造函数,接口不能有构造函数
3.抽象类可以有main(),接口不能有
4.抽象类中的方法可以是任意访问修饰符,接口默认是pubilc
5.可以多实现,不能多继承(假设A类和B类都有t方法,且具体实现不一样。C类继承A类和B类,当C类调用t方法时,会出现歧义。因为,A类和B类都有t方法,但具体实现不一样。可以多实现是因为,接口中的方法没有具体实现。继承多个接口,就算两个接口中有相同的方法,也不会出现矛盾。)
7.IO流的分类
按类型(传输单位)来分:字节流和字符流
按功能(流向)来分:输入流和输出流
字节流: 它处理单元为1个字节(byte),操作字节和字节数组,存储的是二进制文件,如果是音频文件、图片、歌曲,就用字节流好点(1byte = 8位);
字符流: 它处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,如果是关系到中文