1.JDK和JRE的区别?
JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。
JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。
2.==和equals的区别?
基本类型:比较的是值是否相同;
引用类型:比较的是引用是否相同;
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2);//true
String str3 =newString("abc");
String str4 =newString ("abc");
System.out.println(str3==str4);//false
System.out.println(str3.equals(str4));//true
解析:equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。
eg.
Integer i1 = 100, i2 = 100;
Integer i3 = 1000, i3 = 1000;
System.out.println(i1==i2);//true
System.out.println(i3==i4);//false
解析:在整数的包装类当中,在第一次创建Integer 类的对象的时候,都会首先创建好缓存数组。当需要包装的 值是在IntegerCache数组当中的元素的时候,就会返回数组当中的Integer 对象。JVM 默认就会设置数组的范围为-128 ~ 127 。如下:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
3. final 在 java 中有什么作用?
final 修饰的类叫最终类,该类不能被继承。
final 修饰的方法不能被重写。
final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。
4. java 中的 Math.round(-1.5) 等于多少?
等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃。
5.String、StringBuffer、StringBuilder的区别?
String是字符串常量,final修饰;StringBuffer字符串变量(线程安全);StringBuilder 字符串变量(线程不安全).此外StringBuilder和StringBuffer实现原理一样,都是基于数组扩容来实现的.
StringBuffer和StringBuilder的实现原理一样,其父类都是AbstractStringBuilder.StringBuffer是线程安全的,StringBuilder是JDK 1.5新增的,其功能和StringBuffer类似,但是非线程安全.因此,在没有多线程问题的前提下,使用StringBuilder会取得更好的性能.
6. String str="i"与 String str=new String("i")一样吗?
不一样,因为内存的分配方式不一样。String str="i"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String("i") 则会被分到堆内存中。
7. 如何将字符串反转?
1)使用 StringBuilder 或者 StringBuffer 的 reverse() 方法。
String str = "abcdefg";
StringBuffer stringBuffer = new StringBuffer(str);
StringBuilder stringBuilder = new StringBuilder(str);
System.out.println(stringBuffer.reverse());
System.out.println(stringBuilder.reverse());
2)使用String对象的toCharArray()方法,将字符串转换为char[]数组,然后逆向遍历并拼接。
String str = "abcdefg";
StringBuilder strNew =new StringBuilder();
char[] chars = str.toCharArray();
for(int i = chars.length -1; i >= 0; i--){
strNew.append(chars[i]);
}
3)使用String对象的charAt方法逐个获取字符,正向遍历,逆向拼接
String str = "abcdefg";
StringBuilder strNew =new StringBuilder();
for (int i = 0; i < str.length(); i++) {
strNew.insert(0, str.charAt(i));
}
8.String类的常用方法有哪些?
indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
getBytes():返回字符串的 byte 类型数组。
length():返回字符串长度。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字符。
substring():截取字符串。
equals():字符串比较。
9.普通类和抽象类的区别?抽象类可以用final修饰吗?抽象类和接口的区别?
1)普通类不能有抽象方法,抽象类可以有也可以没有抽象方法,抽象类不能直接实例化,普通类可以。
2)抽象类不能用final修饰,因为抽象类的定义就是为了被继承。
3)抽象类和接口的区别:
抽象类使用extends继承,接口使用implements实现;
抽象类可以有构造函数,接口不能有;
抽象类可以有非抽象接口,接口不能有(java8之后可以有了)
类可以实现多个接口,但是只能继承一个类;
接口中的方法默认使用public访问修饰符,抽象类中的方法可以任意访问修饰符(抽象方法不能使用private)
网友评论