zoukankan      html  css  js  c++  java
  • Java入门5.2---String类、StringBuffer类、StringBuilder类、System类、Data类、SimpleDataFormat类、Calendar类、Math类、BigInteger类与BigDecimal类

    一、字符串相关类

    1.String类

    1.1 字符串的特性

    1. String是一个final类不可被继承,代表不可变的字符序列,底层使用char[]存放
    2. 字符串是不可变的。一个字符串对象一旦被配置,其内容是不可变的。
    3. 字符串使用Unicode字符编码,一个字符占两个字节

    1.2 字符串比较

    String s1 = "JavaEE";
    String s2 = "JavaEE";
    String s3 = new String("JavaEE");
    System.out.println(s1 == s2); // true
    System.out.println(s1 == s3); // false
    System.out.println(s1.equals(s3)); // true
    

    String s1 = "JavaEE"; // 字符串常量池里面新建一个字符串"JavaEE"
    String s2 = "JavaEE"; // 字符串常量池里面已经有一个字符串"JavaEE",直接指向它
    String s3 = new String("JavaEE"); // 在堆中开辟一块地址,指向字符串常量池中的"JavaEE"
    System.out.println(s1 == s2); // true
    System.out.println(s1 == s3); // false
    System.out.println(s1.equals(s3)); // true
    
    String s4 = "JavaEE" + "Android"; //字符串常量池里面新建一个字符串"JavaEEAndroid",是否有加号一样
    String s5 = "Android"; // 字符串常量池里面新建一个字符串"Android"
    s5 = s5 + "Hadoop"; // 在字符串常量池新建一个字符串"AndroidHadoop",栈中的s5指向这里
    String s6 = s1 + s5;
    String s7 = s6.intern();
    String s8 = "JavaEEAndroid"; // // 字符串常量池里面已经有一个字符串"JavaEEAndroid",直接指向它
    System.out.println(s4 == s6); // false
    System.out.println(s4.equals(s6)); // false
    System.out.println(s7 == s4); // false
    System.out.println(s4 == s8); // true

    1.3 String类的常用方法

    1.3.1 字符串对象操作

    方法 实现

    int length()

    char charAt(int index):返回在指定index位置的字符,index从0开始

    boolean equals(Object anObject):比较两个字符串是否相等,相等返回true,否则返回false
    int compareTo(String anotherString)
    int indexOf(String s):返回s字符串在当前字符串中首次出现的位置,若没有,返回-1
    int indexOf(String s,int startpoint):返回s字符串从当前字符串startpoint位置开始的,首次出现的位置  
    int lastIndexOf(String s):返回s字符串在当前字符串中最后一次出现的位置,若没有,返回-1  
    int lastIndexOf(String s,int startpoint):  
    boolenan startsWith(String s):判断当前字符串是否以prefix开始
    boolean endsWith(String s,int startpoint):判断当前字符串是否以prefix结束  
    boolean regionMatches(int firstStart,String other,int otherStart,int length):判断当前字符串从firstStart开始的子串与另一个字符串other从otherStart开始,length长度的子串是否equals

    1.3.2 字符串对象修改

    方法 实现
    public String substring(int startpoint)
    public String substring(int start,int end):返回从start开始到end结束的一个左闭右开的子串,start可以从0开始  
    public String replace(char oldChar,char newChar)  
    public String replaceAll(String old,String new)  
    public String trim():去除当前字符串中首尾出现的空格,若有多个,就去除多个  
    public String concat(String str):连接当前字符串与str  
    public String[] split(String regex):按照regex将当前字符串拆分,拆分为多个字符串,整体返回值为String[]。  

    举例:

    1.3.3 字符串与基本数据类型、包装类之间转换

    字符串--->基本数据类型、包装类

    调用相应的包装类的parseXxx(String str)

     

      

    基本数据类型、包装类--->字符串

    1.调用字符串的重载的valueOf()方法

    方法实现避免了CalssCastException和NullPointerException,但是要注意,如果对象为null,那么返回的值是"null"字符串,而不是null。一定要注意这一点,在实际开发中,这个方法是比较常用的。

    String中的valueOf方法大致可以分为三种:

    1. String.valueOf(Object)、
    2. String.valueOf(char[])、
    3. String.valueOf(基本数据类型)

    2.强转

    只有类型匹配的才可以强转,例如Object obj = new Integer(10); String str = (String) obj;会抛CalssCastException异常

    3.toString()

    必须保证对象不为null,否则抛NullPointerException异常

    String.valueOf(Object)源码:

    String.valueOf(char[])源码:

    举例:

    Integer arg = null;
    String.valueOf(arg); // 输出 null
    String.valueOf(null); // 抛java.lang.NullPointerException
    

    因为Java中所有类的顶级父类都是Object,从Java重载方法的执行这篇文章中我们知道,方法重载时,char[]数组优先于Object,因此null会调用String.valueOf(char[])方法。对于Integer arg = null;与数组类型不匹配,因此调用String.valueOf(Object)方法。

    1.3.4 字符串与字节数据间的转换

    字符串--->字节数组

    调用字符串的getBytes()

    字节数组--->字符串

    调用字符串的构造器

    1.3.5 字符串与字符数组的转换

    字符串--->字符数组

    调用字符串的toCharArray()

    字符数组--->字符串

    调用字符串的构造器

    2. StringBuffer类

    2.1 StringBuffer类的特点

    1. java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。
    2. 很多方法与Strinh相同,但StringBuffer是可变长度的。
    3. StringBuffer是一个容器。
    4. 线程安全

    2.2 常用方法

    添加:

    StringBufferer append(String s)

    StringBufferer append(int n)

    StringBufferer append(Object o)

    StringBufferer append(char n)

    StringBufferer append(long n)

    StringBufferer append(boolean n)

     

    插入:

    StringBufferer insert(int index,String str)

    反转此StringBuffer:

    public StringBuffer reverse()

    删除:

    StringBuffer delete(int startIndex,int endIndex)

     
    public char charAt(int n)  

    修改:

    public void setCharAt(int n,char ch)

     
    StringBuffer replace(int startIndex.int endIndex,String str)   
    public int indexOf(String str)  
    public String substring(int start,int end)  

    长度:

    public int length()

     

    3. StringBuilder类

    3.1 StringBuilder类的特点

    1. 可变的字符串序列,是jdk5.0新加入的;
    2. 线程不安全,效率要高于StringBuffer

     对比String、StringBuffer、StringBuilder三者在添加上的效率:由高到低StringBuilder>StringBuffer>String

    二、日期类

    1. java.lang.System类

    System类提供的public static long currentTimeMills()用来返回当前时间与1970年1月1日0分0秒之间以毫秒为单位的时间差,此方法适用于计算时间差。

    计算世界时间的主要标准有:UTC(Universal Time Coordinated)、GMT(Greenwich Mean Time)、CST(Central Standard Time)

    2. java.util.Date类以及子类java.sql.Date类

    表示特定的瞬间,精确到毫类

    构造方法:

    1. Date():使用Date类的无参数构造方法创建的对象可以获取本地当前时间。
    2. Date(long date)

    常用方法:

    1. getTime():返回自1970年1月1日00:00:00GMT以来此Date对象表示的毫秒数,
    2. toString():把此Date对象转换为以下形式的Stirng:dowmon dd hh:mm:ss zzz yyyy,其中:dow是一周中的某一天(Sun,Mon,Tue,Wed,Thu,Fri,Sat),zzz是时间标准。

    3. SimpleDataFormat类

    Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。

    格式化(日期--->文本):

    1. SimpleDateFormat():默认的模式和语言环境创建对象
    2. public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用public Stirng format(Dtae date)方法格式化时间对象date

    解析(文本--->日期):

    1. public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期

    4. java.util.Calendar类

     java.util.Calendar是一个抽象基类,主要用于完成日期字段之间相互操作的功能。

    获取Calendar实例的方法:

    1. 使用Calendar.getInstance()方法
    2. 调用它的子类GregorianCalendar的构造器。

    一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比偶如YEAR,MONTH,DAY_OF_WEEK,HOUR_OF_DAY,MINUTE,SECOND

    1. public void set(int field,int value)
    2. public void add(int field,int amount)
    3. public final Date getTime()
    4. public final void setTime(Date date)

    5.org.joda.time

    三、java.long.Math类

    四、BigInteger类与BigDecimal类

     

    举例:

    参考链接:

    【1】String的valueOf方法源码解读_p7+的博客-CSDN博客_string.valueof源码

    【2】Joda-Time DateTimeFormatter 日期格式化与解析_360linker-CSDN博客

    【3】Java之BigDecimal详解 - LanceToBigData - 博客园

    【4】判断浮点数是否相等 - 花染梦 - 博客园

    【5】Java 比较浮点数的正确方式 | 落英坠露

    【6】Java中两个long类型进行相加运算,值溢出的解决方法_riemann_的博客-CSDN博客_long类型相加

  • 相关阅读:
    设计模式-1-概要(c#版)
    UML图示说明
    阿里云SLB双机IIS多站点负载均衡部署笔记
    阿里云分布式关系数据库DRDS笔记
    一些小经验
    NOSQL场景梳理
    内核linux-3.4.2支持dm9000
    构建根文件系统
    u-boot-1.1.6移植之dm9000
    移植u-boot-1.1.6(原创)
  • 原文地址:https://www.cnblogs.com/nxf-rabbit75/p/13511134.html
Copyright © 2011-2022 走看看