一、java基础
1、JDK和JRE的区别:
JDK(Java Development Kit)是java的开发环境,包括java开发工具、java基础类库和java运行环境(jre)。
JRE(Java Runtime Enviroment)是java的运行环境,包括JVM和java核心类库。
JDK安装目录下主要文件夹及文件作用:
(1)bin文件夹:提供JDK工具程序:包括javac、java、javadoc等可执行程序。
(2)jre文件夹:存放java运行环境文件。
(3)lib文件夹:存放java的类库文件。
(4)include文件夹:存放本地方法的文件。
2、==和equals()的区别:
==:如果比较的是原始数据类型,则比较的是它们的数值。如果比较的是引用数据类型,则比较的是它们的物理地址(在堆内存中的地址)。
equals():使用equals方法进行比较,取决于equals方法的具体实现。所有的类都继承Object类,在Object类中equals方法比较的是物理地址。而对于某些重写了equals和hashCode方法的类(如:String),比较的是数值。
3、如果两个对象的hashCode()相同,equals()是否一定为true?
4、final的作用?
final修饰的类不能被继承,final修饰的方法不能被重写,final修饰的属性不可变。
5、比较String str1=“hello’’ 和 String str2=new String(“hello”)
String str1="hello";
String str2=new String("hello");
System.out.println(str1==str2); //false
System.out.println(str1.equals(str2)); //true
(1)在栈中创建引用str1,然后在字符串常量池中找是否有“hello”。有,则直接将“hello”在字符串常量池中的地址返回给str1。没有,则先在字符串常量池中添加“hello”,并返回地址给str1。
(2)在栈中创建引用str2,并在堆中开辟一块空间。然后在字符串常量池中找是否有“hello”。有,则直接将“hello”在字符串常量池中的地址返回给堆内存。没有,就先添加“hello”。
区别:str1保存的是“hello”在常量池中的地址,而str2保存的是 堆保存“hello”在常量池中的地址 的地址。
6、如何将字符串反转?
public class ReverseString {
//非递归方法
public static String reverse1(String name){
if(name==null||name.length()==1)
return name;
//将字符串转换成字符数组
char[] arr=name.toCharArray();
int start=0;
int end=arr.length-1;
while(start<end){
char temp=arr[start];
arr[start]=arr[end];
arr[end]=temp;
start++;
end--;
}
return new String(arr);
}
//递归方法
public static String reverse2(String name){
if(name==null||name.length()==1)
return name;
//1号位置开始的子串加上0号位置的字符,递归子串
return reverse2(name.substring(1))+name.charAt(0);
}
}