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类型相加

posted @ 2020-07-01 00:05  nxf_rabbit75  阅读(178)  评论(0编辑  收藏  举报