Java常用类

来源:互联网 发布:青山水利软件价格 编辑:程序博客网 时间:2024/06/12 01:14

  今天我们来讲一讲Java的常用的类。

  1.String类

  String类的底层代码使用char数组实现的,value[]。String类是有final修饰的,因此它是不可以继承的类。

  ①String类对象的存储很有意思,它不像其他的类对象仅仅存储在堆和栈中,他有另外一种独立的存储空间,叫做字符串缓冲池。事实上,无论是哪种方式创建出来的字符串对象,String对象的实体内容都是存储在字符串缓冲池中的。这是因为当你新创建一个对象的时候,JVM会先在缓冲池当中查找有没有相同内容的字符串,若有,则将指针给予这个字符串,若没有则重新创建字符串。当重新创建字符串时,若是通过new创建出来的,则会在堆中开辟一个存储空间,记录变量的指针,同时指向在缓冲池中的字符串实体内容。若是通过String str = "aa"创建出来的对象,则会绕过堆,直接将变量指向在缓冲池中创建的实体内容。还有需要注意的是,当使用+连接符号重新给一个字符串变量赋值时,这个被赋值的变量相当于重新创建了一次,并不是在实体内容中新加了一个字符串,这是因为String是不可变的,value是有final修饰的。

  ②String类的常用方法

  length():查看字符串的长度,相当于查看内部的char数组的长度。

  charAt(index);返回index下标的字符。(字符串的下标从0开始)

  equals(str):比较两个字符串的内容是否相同。

  compareTo(str):比较两个字符串的大小(比较规则是:比较第一个char的ASCLL码值),返回正值表示形参小,返回负值表示形参大。

  indexOf(str):返回形参字符串或者字符在字符串中首次出现的下标。

  lastIndexOf(str):返回形参字符串或者字符最后依次在字符串中出现的位置的下标。

  startWith(str):判断当前字符串是否已形参str开始。

  endWith(str):判断当前字符串是否以形参str结束。

  regionMaches(int,str,int,str):?????????????????????????????????

  subString(int):截取从int下标开始到结束的字符串。左闭右开,即包含第int个字符

  replace(str1,str2):将当前字符串中所有str1替换为str2并返回新的字符串,当前字符串不变

  trim():取出当前字符串的两端的空格。

  concat(str):返回连接后的字符串,原来的串不变。

  split("a"):返回一个将当前字符串以a拆分之后的字符串数组。

  注意:所有字符串对象的以上方法操作都不会对当前字符串造成改变,而是会生成一个新的字符串。

  2. 字符串与包装类-字节数组-字符数组的转换

  ①字符串与基本数据类型,包装类的转换

  字符串->基本数据类型和包装类:调用包装类型的parsexxx方法,再自动拆箱。

  基本数据类型和包装类->字符串:一是直接+“”,二是调用String的valueOf()或者new String(Object)方法。

  注意:向谁转型,就调用谁的静态方法

  ②字符串与字节数组的转换

  字符串->字节数组:调用String对象的getBytes()方法

  字节数组->字符串:调用String对象的构造器new String(byte[])

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

  字符串->字符数组:调用String对象的toCharArray()方法。

  字符数组->字符串:调用String类的构造器new String(char[])。

  3.StringBuffer与StringBuilder的用法

  StringBuffer/StringBuilder与String类最大的区别就是前二者是字符可变的序列,即可以在原来的对象上进行增加,减少,删除等操作。 

  StringBuffer有一个初始的容器长度,为16,但是它的初始length依然为0,一旦对象当中的容量大于了16,再对对象进行扩容。StringBuffer因为是可变序列,所以他除了String类的一些方法之外,他还有自己独立的方法。

  append():添加任意基本数据类型和String类型的对象到当前对象中。

  insert(index,str):在指定位置添加str。

  reverse():反转当前的对象。

  delete(index1,index2):删除下标从index1到index2位置的内容。

  StringBuilder也是可变的字符序列,但是它和前两者最大的不同是它的共享数据是线程不安全的

  从效率上考虑,若不讲线程安全与否的因素考虑在内:StringBuilder>StringBuffer>String。

  4.System、Date、SimpleDateFormat、Math、BigInteger、BigDecimal类(我们会在之后专门的讲述这些类的使用