1,JDK和JRE的区别?
JDK:即Java Development Kit,java开发工具包。提供java的开发和运行环境。
JRE:即Java Runtime Environment,java运行环境,为java提供运行的环境。具体就是JDK包含了JRE,还有java源码的编译器javac, 以及很多java程序调试分析工具。通俗的说就是如果只需要运行安装JRE就可以,如果要编译,则需要JDK。
2,==和equals的区别?
==:
==对于基本类型和引用类型作用是不同的。在基本类型中==表示:值是否相同;在引用类型中:引用是否相同。
String a = "s1";
String b = "s1";
String c = new String("s1");
System.out.printl(a==b);//true
System.out.printl(a==c);//false
System.out.printl(a.equals(b));//true
System.out.printl(a.equals(c));//true
在上面代码中由于a和b指向的是相同的引用,所以结果为true,而new String()方法重新开辟了内存空间,返回false;equals方法比较的一直是值,返回的是true。
equals:
equals本质上就是==,只不过是String和Integer等方法重写了equals方法,把它变成了值比较。以下为String重写的equals方法:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
3,两个对象的hashCode()相同,则equals()也一定为true,对吗?
不对,因为在散列表中,hashCode()相同即两个键值对的哈希值相等,然而哈希值相等,不能得出键值对相等。
4,final在Java中有什么作用?
final修饰的类叫最终类,不能被继承;final修饰的方法不能被重写;final修饰的变量是常量,常量必须初始化,且不能被修改。
5,java中的Math.round(-1.5)等于多少?
等于-1,因为中间值(0.5)向右取整。
6,String数据基础数据类型吗?
String不属于基础类型,基础类型有byte,short,int,double,long,char,float,boolean,String属于对象。
7,java中操作字符串有哪些类?它们之间有什么区别?
操作字符串的类有:String,StringBuffer,StringBuilder。
String相比于StringBuffer和StringBuilder,String声明是不可变的对象,每次操作都会生成新的对象,然后将指针指向新的对象,而StringBuffer和StringBuilder可以在原数据的基础上进行操作,所以在经常改变字符串内容的情况下不用String。
StringBuffe和StringBuilder 的区别在于StringBuffer是线程安全的,StringBuilder不是线程安全的,但StringBuilder的性能却高于StringBuffer,所以单线程推荐StringBuilder,多线程则推荐StringBuffer。
8,String str="i"和String str = new String("i")一样吗?
不一样,因为内存的分配方式不同,前者java会分配到常量池中,后者会被分配到堆中。
9,如何将字符串反转?
使用StringBuffer或StringBuilder 的reverse()方法。
10,String类的常用方法有哪些?
- equals():字符串比较
- substring():截取字符串
- replace():字符串替换
- length():返回字符串长度
- indexOf():返回指定字符的索引
- charAt():返回指定索引处的字符
- trim():去除字符串两端空白
- spilt():分割字符串为一个数组
- getBytes():返回字符串为byte类型数组
- toLowerCase():将字符串转换成小写字母
- toUpperCase():将字符串转换成大写字母
11,抽象类必须有抽象法法吗?
不需要
12,普通类和抽象类有哪些区别?
普通类不能有抽象方法,抽象类可以有抽象方法。普通类可以实例化,抽象类不能实例化。
13,抽象类能使用final修饰吗?
不能,定义抽象类的意义就是为了让其他类继承,而final修饰的类不能继承,这是矛盾的。
14,接口和抽象类有什么区别?
- 接口使用implements关键字实现,抽象类使用extends继承
- 接口不能有构造函数,抽象类可以有
- 接口不能有main方法,抽象类可以有
- 接口可以实现多个,抽象类只能继承一个
- 接口中的方法默认是public修饰的,抽象类可以是任意修饰符修饰
15,java中IO流分为几种?
按照功能分为输入流(input)和输出流(output)
按照类型分为字节流(8位)和字符流(16位)
16,Files常用的方法有哪些?
- Files.exits() :检测路径是否存在
- Files.createFile(): 创建文件
- Files.createDirectory(): 创建文件夹
- Files.delete() :删除一个文件或目录
- Files.copy() :复制文件
- Files.move() :移动文件
- Files.size() :查看文件个数
- Files.read() :读取文件
- Files.write() : 写入文件