java第五天---String类和Date类

本章节讲解常用类:String类和Date类

一、String类

  1、什么是String类?

    String类是用来创建字符串类型的,是引用数据类型。

  2、特点:

    ①字符串不能改变

    ②因为不能改变,所以是可以共享的

    ③字符串的效果相当于要给char[]数组,但是实际上是byte[]字节数组

  3、创建方式

    第一种: String   str="123";  //直接使用双引号的就是字符串对象

    第二种:通过构造方法:String str=new String("abc");

  4、常用方法(更多方法参考jdk8)

    charAt(index):返回指定下表处的字符

    indexOf(char):返回该字符第一次出现的下标

    concat(str,str1....):拼接字符串,得到一个新的字符串

    contains(char):判断是否包含指定字符

    endWith(char):判断是否以指定字符结尾

    startsWith(char):判断是否以指定字符开头

    subString(index):截取从index开始到字符串结尾的字符串

    subString(startIndex,endIndex):截取开始到结束下边之间的字符串,前闭后开

    split(""):以指定字符为间隔分割字符串为字符数组

    trim():删除字符串开头结尾处的空格,返回一个新的字符串

    toString():返回此对象本身

    replace(old,new):使用新的字符替代字符串中的旧的字符

    length():返回字符串的长度

    join(连接符,obj....):使用指定连接符连接多个字符串

  5、字符串的比较

     字符串的比较不使用  == ,使用equals(Object)或者equalsIgnoreCase(Object),equalsIgnoreCase()不区分  大小写。

    为什么不能使用 "=="?

      ①”==“在基本数据类型比较时,比较的是值。在比较引用数据类型时,比较的是内存地址

      ②equals()在底层依旧使用的”==“,不过在String类中对其进行了重写,让它能够比较字符串的值

   “==”和equals()从内存分析:

     在内存中的栈、堆、常量区中,栈用来存放变量名(引用),基本数据类型的数据也存放在栈中,堆中用来存放创建的对象,常量中存放常量值。而字符串不改变,就发生在常量  区。当String  str1="123"加载时,str1 这个变量名就加载进栈,接着str1 到常量池去寻找 “123” 这个常量值,如果常量池没有该常量,那么就创建一      个,str1中存放 “123” 的地址。当String  str2="123"加载时,str2加载进栈,然后也去常量池中寻找 “123” ,这是常量池中已经存在了该常量,就不再  创建,使用已经存在的这个常量得地址。这个就体现了String字符串不变,可共享的特点。到 String  str3=new String("123")时,str3这个变量名进栈,  new  String()在堆里创建,str3存放的是堆里对象得地址,对象的初始化值会到常量池中寻找,如果常量池中存在,就引用已经存在的,不存的话,在  常量池中先创建。

  6、String的不足

    上边我们提到了字符串是不可变的,如果我们要在原来字符串的基础上去添加字符串,就会开辟一个空间,将拼接好的字符串放进去,拼接前的  字符串还在内存中,新加的数量少还好,如果由大量的数据拼接,就会浪费大量的时间和内存。

    所以,java给了两个新的类:StringBuffer和StringBuilder。这两个类创建的字符串都是可变的,拼接之类的就是再原来基础上拼接,不会再生成一  个新的字符串。这样就节省了大量的空间和开辟空间的时间。StringBuffer是线程安全的,StringBuilder是线程不安全的。这两个的类方法和String类一  样。StringBuffer和StringBuilder拼接和插入使用append()和insert()。String拼接字符串可以使用  +  ,String无法插入。

 二、Date类

   *Date类做什么用?

    用来获取当前本地的时间。

  *常见Date类对象?

    Date d=new Date();

  *通过Date类获取的时间,其格式不适合我们进行阅读,所以要进行格式化。

    格式化时用的类:SimpleDateFormat       该类中两个方法:format()将时间格式转为特定格式的字符串。parse()将字符串转为日期格式

//将本地时间进行格式化,返回值为字符串
Date date=new Date();
//构造方法里边设置想要格式成的样式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format=sdf.format(date);
//将字符串转换为日期格式 ,要转的字符串格式要和构造方法中的规则样式一样,这样才能够解析
Date newDate=sdf.parse(format);

  *SimpleDateFormat类时jdk1.7之前提供的,jdk1.8之后提供的如下:

    获取本地时间:

      ①LocalDateTime类,获取本地的日期时间

      ②LocalDate类,获取本地的日期

      ③LocalTime类,获取本地的时间

      都是通过now()方法获取本地时间,应为now()是静态的,所以可以  类名.now()

    格式化使用的类:

      DateTimeFormatter

   格式化的过程和jdk1.7不同,看例子:  

 public static void main(String[] args) throws ParseException {
//        获得当前的日期
        LocalDate now = LocalDate.now();
//        使用DateTimeFormatter类的ofPattern()设置格式
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//        对日期进行格式化format()方法
        String format = now.format(dateTimeFormatter);
        System.out.println(format);

        //将字符串转换为日期格式
        String str="2020.03.12";
//        使用DateTimeFormatter类的ofPattern()设置格式。只有方法中的格式和字符串的格式对应,parse()方法才能识别到那位是日期
        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy.MM.dd");
//        此处的parse()方法由LocalDate类调用,而jdk1.7之前是由SimpleDateFormat类的对象调用
        LocalDate parse = LocalDate.parse(str, dateTimeFormatter1);
        System.out.println(parse);
    }

 

       

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

posted @ 2020-12-11 19:09  橙汁one  阅读(248)  评论(0编辑  收藏  举报