(3)StringBuilder和StringBuffer的区别(一般情况下分别写出概念就可以)
1. String、StringBuffer、StringBuilder都是Charsquence接口的子类 2. String、StringBuffer、StringBuilder都是final修饰的,不能被继承,也就是说三者都没有子类 3. String是不可变类,创建的字符串序列不能被修改,StringBuffer和StringBuilder是可以修改的 4. StringBuffer是线程安全的,StringBuilder是非线程安全的,因此StringBuilder效率更高,在不考虑线程安全或者单线程情况下优先考虑使用StringBuilder。
(4)Java对String的优化
String是一个不可变类,如果发生了改变一定是指向了一个新的对象。 在JVM中有一块区域叫做常量池,常量池里放着字符串的字面量和常量。 当字面量出现一个字符串后,Java会将该字面量放入常量池, 如果再有变量引用该字符串时,直接返回常量池中字符串的引用,而不创建对象。 面试题:
/**
-
面试题
-
@author Ray * */ public class StringDemo1 { public static void main(String[] args) {
//字面值+字面值 = 常量池 //字面值+对象 = 对象 //对象+对象 = 对象 // 对拼接结果使用intern,则会将对象放置在常量池中,如果已经存在,则返回已经存在的对象地址,Java1.6是将字面值放置在常量池中,Java1.7是将引用地址放置在常量池中 String str1 = "Hello"; String str2 = "He"+"llo"; String str3 = "He"; String str4 = "llo"; String str5 = new String("He"); String str6 = new String("llo"); String str7 = new String("Hello"); System.out.println("---------"); System.out.println(str1 == str2);//true System.out.println((str1).equals(str2));//true System.out.println("---------"); System.out.println((str3+str6)==str1);//false System.out.println((str3+str6).equals(str1));//true System.out.println((str5+str4)==str1);//false System.out.println((str5+str4).equals(str1));//true System.out.println("---------"); System.out.println((str5+str6)==str7);//false System.out.println((str5+str6).equals(str7));//true System.out.println("---------");
}
}
(5)Scanner获取键盘输入
主要方法: hasNextXXX():是否还有下个输入项,其中XXX可以是Int等代表基本类型的字符串。 nextXxx():获取下个输入项,输入项可以是基本类型数据,如果是字符串则直接使用next() /**
-
Scanner类
-
@author Ray * */ public class Test2 {
public static void main(String[] args) {
System.out.println("请输入:"); Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { int i = scanner.nextInt(); System.out.println(i); } scanner.close();
}
} (6)系统相关的类
System类代表当前运行Java程序的平台。System为开发者提供了获取系统环境变量,系统属性等方法。 Map<String,String> getenv():获取系统所有的环境变量,保存在map集合中。 String getenv(String name):获取指定的环境变量 Properties getProperties():获取系统的属性。
(7)Runtime类
Runtime类代表Java程序的运行时环境,每个Java程序都有一个与之对应Runtime实例。可以访问JVM相关信息,处理器数量,内存信息等 int availableProcessors():获取处理器数量 long freeMemory():获取jvm空闲内存 long totalMemory():获取最大内存 long maxMemory():获取虚拟机可以用最大内存
(8)Math工具类 Math提供了基本的加减乘除以为,还提供了一些复杂的数学运行,三角函数,对数运算等,Math类还提供了两个常量PI和E
Math.sqrt() 求平方根,参数为负数时返回NAN Math.pow(x,a) 幂运算,x的a次方 Math.floor(a) 向下取整(注意:不四舍五入) Math.ceil(a) 向上取整(注意:不四舍五入) Math.floorMod(x,y) 求余,x%y Math.toDegree() 弧度转换成角度 Math.toRadians() 角度转换成弧度 Math.sin() 求正弦 Math.cos() 求余弦 Math.tan() 求正切 Math.abs() 求绝对值 Math.max() 两个数的最大值 Math.min() 两个数最小值 Math.random() 0.0到1.0的随机数
(9)Random生成随机数
Random():以当前时间作为种子 Random(long seed):需要开发者显式传入long型的种子 nextDouble():生成0.0—1.0之间的伪随机double数。 nextFloat():生成0.0—1.0之间的伪随机float数。 nextInt():生成一个 int类型取值范围内的伪随机整数 nextInt(int a):生成0-a之间的伪随机整数。 nextLong():生成处于long整数取值范围的伪随机整数。