1、 JDK和JRE的区别?
- JDK:Java开发工具包。提供了java的开发环境和运行环境。
- JRE:java运行环境,为java的运行提供了所需要的环境。
具体来说JDK包含了JRE,同时包含了编译java源码的编译器javac,还包含了调试分析工具。如果我们只需要去跑java程序,我们只需要去安装JRE就可以,如果是编写Java程序安装JDK。
2、== 和equals的区别是?
==:
分为堆基础类型和引用类型,对两者的作用是不同的。
- 基础类型:比较的是值是否相同。
- 引用类型:比较的是引用是否相同。
equals:
equals本质上是==,只不过String和Integer重写了equals方法,把它变成了值比较。
equals方法的码源是:
public boolean equals(Object obj){
return (this == obj);
}
通过源码就可以看初equals方法的本质就是==。
两个对象的hashcode()相同,则equals()也一定为true,对不?
不对,因为在散列表中hashcode()相等即为键值对的哈希值相等,然而hash值相等并不一定键值对相等。
final关键字的作用?
- final修饰类,类不能被继承。
- final修饰的方法不能被重写
- final被修饰的变量为常量,常量必须初始化,初始化后的值不能被修改。
java 中 Math.round(-1.5)等于?
等于-1,因为在数轴上取值事,向上取整。
String 是基础类型吗?
不属于,基础类型有8种:byte,short,int,long,double,float,char,boolean,而String属于对象。
Java中操作字符串有哪些类?它们有哪些区别?
操作字符串的类有:String、StringBuffer、StringBuilder。
String与StringBuffer和StringBuilder的区别在于,String申明的是一个不可变的对象,每次操作都会创建一个新的String对象,而StringBuffer和StringBuilder可以在原来对象的基础上进行操作,对象没有改变,所以在经常使用字符串的修改的情况下不要去使用String。
StringBuffer和StringBuilder的最大的区别在于
StringBuffer的线程是安全的,而StringBuilder的线程是不安全的,但是StringBuilder的性能要优于StringBuffer,在单线程的环境下推荐使用StringBuilder,而在多线程的情况下推荐使用StringBuffer,这样就确保了安全性问题。
String对象为什么是不可变的?
因为String类是被final关键字修饰字符数组来保存字符串的。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
/** Cache the hash code for the string */
private int hash; // Default to 0
/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = -6849794470754667710L;
String s= “i” 和 String s = new String(“i”)一样吗?
不一样, 在内存分配上是不一样的。String s = “i” JVM会将其分配到常量池中,而第二个会被分配到堆内存中。
如何实现字符串反转?
使用StringBuilder或StringBuffer的reverse()方法。
String 类的常用方法?
- indexOf():返回字符串的索引。
- charAt():返回指定索引处的字符。
- replace():字符串替换。
- trim():去除掉字符串两端的空白。
- split():分割字符串,返回一个分割后的字符串数组。
- getBytes():返回字符串的byte类型数组。
- length():返回字符串长度。
- toLowerCase():将字符串转换为小写字母。
- toUpperCase():将字符串转成大写字母。
- substring():截取字符串。
- equals():字符串比较。
抽象类必须有抽象方法吗?
不需要。
普通类和抽象类的区别?
- 普通类不包含抽象方法,抽象类可以包含抽象方法。
- 抽象类不能直接实例化,普通类可以直接实例化。抽象类的实例化需要另一个类去继承抽象类,再实例化子类。
抽象类能使用final修饰吗?
不能,定义了抽象类就是用来继承的,如果我们去用final修饰,这个抽象类就不能被继承。
接口和抽象类的区别?
- 接口使用的implements实现接口,而抽象类是用来继承的extends。
- 抽象类可以有构造方法,但是接口没有。
- 抽象类可以有main方法并且可以运行,接口没有
- 实现数量:类可以实现多个接口,但是只能继承一个抽象类。
- 接口的默认是用public修饰,而抽象类以可是任意。
java 中IO流分为哪几种?
按功能来分:输入流、输出流。
按类型来分:字节流和字符流。
字节流和字符流的区别是 字节流按8位传输,以字节为单位,字符流是以16位传输以字符为单位输入输出数据。
BIO、NIO、AIO的区别?
- BIO:Block IO 同步阻塞式IO,就是我们平时使用的IO,特点是简单方便,并发处理能力低。
- NIO:New IO 同步非阻塞式IO ,是传统IO的升级,客户端和服务器通过Channel(通道)通信,实现了多路复用。
- AIO:Asynchronous IO 是NIO的升级,也叫NIO2 ,实现了异步非阻塞式IO,异步IO的操作基于事件和回调机制。
Files的常用方法?
- Files.exists(): 检测文件路径是否存在
- Files.createFile():创建文件
- Files.createDirectory():创建文件夹
- Files.delete():删除文件或目录
- Files.copy():复制文件
- Files.move():移动文件
- Files.size():查看文件个数
- Files.read():读取文件
- Files.write():写入文件