Day 16 常用类(3)

常用类(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系统类,主要用于获取系统的属性数据和其他操作,构造方法私有

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好好学习争取保研

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值