常用类(3)
可变字符串
StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全。
StringBuilder:可变长字符串,JDK5.0提供,运行效率快、线程不安全。
和String的区别:
- 效率比String高
- 比String节省内存
两种字符串的方法都是相同的,这里以StringBuffer为例
package Standard;
public class Demo01 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
//1. append(); 追加字符串
sb.append("Java世界第一");
System.out.println(sb.toString());
sb.append("Java真香");
System.out.println(sb.toString());
//2. insert(); 添加、插入字符串
sb.insert(0,"我在最前面");
System.out.println(sb.toString());
//3. replace(); 替换字符串 截取的长度含头不含尾
sb.replace(4,6,"盖");
System.out.println(sb.toString());
//4. delete(); 删除字符串 删除长度也是含头不含尾
sb.delete(4,5);
System.out.println(sb.toString());
}
}
StringBuilder比String运行快的一个案例
public static void main(String[] args) {
long start = System.currentTimeMillis();
String str = "";
for (int i = 0; i < 99999; i++) {
str+= i;
}
System.out.println(str);
long end = System.currentTimeMillis();
System.out.println("用时:"+(end-start));
}
public static void main(String[] args) {
long start = System.currentTimeMillis();
StringBuilder str = new StringBuilder();
for (int i = 0; i < 99999; i++) {
str.append(i);
}
System.out.println(str.toString());
long end = System.currentTimeMillis();
System.out.println("用时:"+(end-start));
}
BigDecimal
思考题:
public static void main(String[] args) {
double s1 = 1.0;
double s2 = 0.9;
System.out.println(s1-s2);//0.09999999999999998
//思考为什么是这个结果
//面试题
double s = (1.4-0.5)/0.9;
System.out.println(s);//0.9999999999999999
}
出现此情况的原因是,在Java中,浮点数的存储是以近似值的方式存放的,定义的s1表面上是整数,实际存储的值可能是0.99999999999
很多实际应用中需要精确运算,而double是近似值存储,不在符合要求,需要借助BlgDecimal.
位置:java.math包中。
作用:精确计算浮点数。
创建方式:BigDecimal bd=new BigDecimal(“1.0”) ;
public static void main(String[] args) {
BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("0.9");
System.out.println(a.subtract(b));//减法
System.out.println(a.add(b));//加法
System.out.println(a.multiply(b));//乘法
BigDecimal d = new BigDecimal("1.4")
.subtract(new BigDecimal("0.5"))
.divide(new BigDecimal("0.9"));//除法
System.out.println(d);
}
进行除法运算时,如果不能准确的计算出结果时需要指定保留的位数和取舍方式。
- 除法: divide(BigDecimal bd,int scal, RoundingMode mode)
- 参数scal :指定精确到小数点后几位。
- 参数mode :。指定小数部分的取舍模式,通常采用四舍五入的模式,。取值为BigDecimal.ROUND_HALF_UP。
Date
Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法所取代。
时间单位
1秒=1000毫秒
1毫秒=1000微秒
1微秒=1000纳秒
大部分已弃用
Calendar
Calendar提供了获取或设置各种日历字段的方法
构造方法: protected Calendar() :由于修饰符是protected,所以无法直接创建该对象。
其他方法:
public static void main(String[] args) {
Calendar ti = Calendar.getInstance();
System.out.println(ti.getTime());
System.out.println(ti.getTimeInMillis());
//获取时间信息
int year = ti.get(Calendar.YEAR);//年
int month = ti.get(Calendar.MONTH);//月
int day = ti.get(Calendar.DATE);//日 DAY_OF_MONTH和DATE相同
int hour = ti.get(Calendar.HOUR_OF_DAY);//小时 HOUR_OF_DAY 24小时 HOUR 12小时
int minute = ti.get(Calendar.MINUTE);//分钟
int second = ti.get(Calendar.SECOND);//秒
System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒");
//老外的月是0~11,所以在输出时加一
//修改时间
Calendar ti2 = Calendar.getInstance();
ti2.set(Calendar.DATE,4);
System.out.println(ti2.getTime().toLocaleString());
//add方法修改时间
ti2.add(Calendar.HOUR_OF_DAY,2);//加就是正数,减就用负数
System.out.println(ti2.getTime().toLocaleString());
//补充方法,获取时间里的最大值和最小值
int max = ti2.getActualMaximum(Calendar.DAY_OF_MONTH);
int min = ti2.getActualMinimum(Calendar.DAY_OF_MONTH);
System.out.println(max);
System.out.println(min);
}
SimpleDateFormat
SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。
进行格式化(日期-→>文本)、解析(文本->日期)。
常用的时间模式字母:
public static void main(String[] args) throws Exception{
//1. 创建SimpleDateFormat对象 y 年 M 月
SimpleDateFormat a = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//2. 创建Date
Date b = new Date();
//格式化Date(把日期转为字符串)
System.out.println(a.format(b));
//解析(把字符串转为日期)
System.out.println(a.parse("1997/08/05 14:04:28"));
}
System
System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有