miracle just wanna be better

装箱和String

2019-07-18
miracle

Object类api

是所有类的根类,此类中放置了一些常用api方法,这些api是所有的类都需要使用的

  • getClass() 获取指定对象的Class类型的对象
  • equals(Object) 判断地址
  • hashCode() 返回指定对象的哈希值
  • toString() 输出对象的类型+@哈希值,如果两个对象相同,说明是一个对象,只占用一份内存空间,输出的哈希值是一样的
    system.out.println(对象名);等价于system.out.println(对象名.toString());

  • String
    1. java.lang.String使用final修饰的类,不能被继承
    2. 字符串底层封装的是字符数组以及操作字符数组的api方法
    3. 字符串一旦创建,对象将无法更改,但字符串的引用是可以重新赋值的
    4. java字符串采用的是Unicode编码
  • String常量池
    1. java为了提高性能,静态的字符串(字面量,常量)在常量池中创建,并尽量使用同一个对象重用静态字符串
    2. 对于重复出现的字符串,jvm会首先在常量池中查找,如果存在就返回该对象 比如:String str1=”abc”;//abc字符串放置到常量池中,在栈中引用是str1
      在另一个作用域中,String str2=”abc”;abc在常量池中寻找是否有相同的字符串,如果有就指向它,没有就在常量池中添加
String str5="helloworld";
String str6="hello"+"world";
String str7="hello";
String str8="world";
String str9=str7+str8;//str9在堆区中出现的

上例中str5和str6指向的是用一个地址,而和str9不是同一个地址
详细解释
常量池

String的常用的api方法

  • indexOf方法 用户在字符串中检索另一个字符串(从前往后找)
    1. int indexOf(String str) 在字符串中检索str,返回第一次出现的位置,如果没有找到就返回-1
    2. int indexOf(String str,int fromIndex) 从fromIndex位置开始检索str
  • lastIndexOf方法 用户在字符串中检索另一个字符串(从后往前找)
    1. int lastIndexOf(String str) 在字符串中检索str,返回第一次出现的位置,如果没有找到就返回-1
    2. int lastIndexOf(String str,int fromIndex) 从fromIndex位置开始检索str indexof和lastIndexOf方法返回的结果都是整数,找到字符串的位置,没找到返回-1
  • subString方法 用于返回一个字符串的子字符串 String subString(int beginIndex,int endIndex),左闭右开
    String subString(int beginIndex),从beginIndex开始一直到末尾

  • trim方法,用于去掉字符串两边的空格 String trim();
  • charAt方法 返回指定位置的字符 char charAt(int index);
    如果超出范围会报数组下标越界异常
    StringIndexOurOfBoundException
  • startWith方法 检测一个字符串是否以自定的字符串开头 boolean startsWith(String str)
  • endsWith方法 检测一个字符串是否以指定的字符串为尾部 boolean endsWith(String str)
  • toUpperCase方法,转换字符串中的所有字符为大写
  • toLowerCase方法,转换字符串中的所有字符为小写
  • valueOf方法 将其他类型转换为字符串类型(静态方法)
  • splite方法,根据指定的规则拆分字符串 String[] split(String str)
  • equals方法,判断内容,因为重写了Object的equals方法
  • equalsIgnoreCase方法,忽略大小写比较内容

StringBuilder类

封装的是可变字符串,对象创建后,可以通过调用本类的api方法,改变其封装的字符串序列

  • StringBuilder append(String str);//追加字符串
  • StringBuilder insert(int destOffset,String str);//插入字符串
  • StringBuilder delete(int start,int end);//删除指定开始和结束的字符串(左闭右开)
  • StringBuilder replace(int start,int end,String str);
  • StringBuilder reverse();//字符串反转
    方法链:方法的返回值都是本类对象就可以用方法链
    比如
  StringBuilder sb = new StringBuilder("abc");
  sb.append("de").insert(2,"哈哈");
  //结果是ab哈哈cde

StringBuffer类

StringBuffer和StringBuilder类用法基本相同

String,StringBuilder和StringBuffer的区别

String字符串列表不可变,里面的字符数组是final
StringBuilder和StringBuffer都是字符串系列可以改变
StringBuilder线程不安全,异步,速度快
StringBuffer线程安全,同步,速度慢
如果频繁对字符串的内容做增删改,首选StringBuilder或StringBuffer
如果字符串内容不改变,首选String

封装类

基本数据类型 封装数据类型  
byte Byte  
char Character  
short Short  
int Integer  
long Long  
float Float  
double Double  
boolean Boolean  
void Void  

为什么使用封装类

8种基本数据类型,给指定的基本数据类型存储完数据
基本数据类型不能通过方法来操作数据,不是面向对象的操作方式
封装类解决了这个问题,先把数据存储给封装类对象,然后通过打点调用方法,通过方法可以对对象中的数据进行操作 比如:

Integer intObj = new Integer(10);
//把整型数据转换成字节
byte byteValue = intObj.byteValue();

不用面向对象的思维实现

int i = 10;
byte byteValue = (byte)i;

拆箱和装箱

  • 拆箱:把类类型拆开变成基本数据类型,即把对象中的数据拆出来变成基本数据类型的数据
  • 装箱:是把基本数据类型的数据封装成对象数据

比如:

  • 一:
Integer i = new Integer(3);//把基本数据类型数据3装箱成对象i
int ii = i.intValue();//把i对象中的数据3,转换成基本数据类型ii
  • 二:
Integer k=3;//装箱
int kk=k;//拆箱

方式一的写法在任意jre版本都能使用,方式二的写法只能在jre1.5及以上版本,此方式是属于自动装箱和拆箱,建议写第二种

数学相关的类

  • Math类
    1. Math类是final的类
    2. 构造方法私有,不可以创建对象
    3. 主要用法是Math类提供了大量的静态方法
    4. 在计算小数的时候,不够精确
      Math.floor(1234.567)//取整 去尾
      Math.ceil(1234.567)//取整 加一
      Math.max(1234,567)//取出最大值
      Math.min(1234,567)//取出最小值
      Math.random()//随记取值
      
  • BigDecimal类
    1. 用于精确计算的类
    2. 在精确计算的时候,要求参数以字符串的方式传入此类的对象
      BigDecimal bigDecimal1 = new BigDecimal("123.456");
      BigDecimal bigDecimal2 = new BigDecimal("123.456");
      BigDecimal bigDecimal3 = bigDecimal1.multiply(bigDecimal2);
      
  • BigInteger
    1. 用于存储任意大小的整数的类
    2. 在存储数据的时候,最好用字符串的方式传入对象
BigInteger bi1 = new BigInteger("1234567890");
System.out.println(bi1.intValue());
  • 日期相关类
  • Date类
  • 1.表示日期的类
  • 2.提供操作日期的方法,但很多方法标记为过时(Deprecated)
  • SimpleDateFormat类
  • 1.parse方法,将日期的字符串转换成日期
//设置指定的日期格式
		SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
		//把日期的字符串转换成日期对象
		Date date1 = simpleDateFormat1.parse("2019-07-18 10:38:14:000");
		SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy年MM月dd日 HH小时mm分钟ss秒SSS毫秒");
		Date date2 = simpleDateFormat2.parse("2019年07月18日 10小时39分钟40秒600毫秒");	
		SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("yyyy/MM/dd HH/mm/ss#SSS#");
		Date date3 = simpleDateFormat3. parse("2019/07/18 10/39/40#601#");
  • 2.format方法,将日期对象转换为日期的字符串
    //设置指定的日期格式
        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
        //把日期对象转换成日期的字符串
        String str1 = simpleDateFormat1.format(new Date());
        //设置指定的日期格式
        SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy年MM月dd日 HH小时mm分钟ss秒SSS毫秒");
        String str2 = simpleDateFormat2.format(new Date());
        //设置指定的日期格式
        SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("yyyy/MM/dd HH/mm/ss#SSS#");
        String str3 = simpleDateFormat3.format(new Date());
    
  • 3.在转换的时候,可以提供转换的格式

  • Calendar类
  • 1.有关日历相关的类,控制时区
  • 2.提供大量的方法来操作时间
  • 3.Calendar类是一个抽象类,不能直接new实例化对象 Calendar cal = Calendar.getInstance(); 总结
    用Date对象存储日期的数据
    用Calendar类的对象来操作Date对象中的日期数据
    用SimpleDateFormat做Date对象和日期字符串相互转换

正则表达式

正则表达式就是记录文本规则的代码
比如:
[a-z] 表示a到z的任意一个字符
[a-z]+ 表示1个或多个a-z的字符组成的字符串

  • 字符集合: [abc] a,b,c中任意一个 [^abc] 除了a,b,c的任意一个字符 [a-z] a-z中任意一个字符 [a-zA-Z0-9] a-z,A-Z,0-9中任意一个字符 [a-z&&[^bc]] a-z中除了b,c以外的任意一个字符

  • 预定义字符集 . 任意一个字符 \d 任意一个数字字符 相当于[0-9] \w 单词字符 相当于[a-zA-Z0-9_] \s 空白字符[\t\n\r\f] \D 非数字字符 \W 非单词字符 \S 非空白字符

  • 数量词: X? 表示0个或一个X X* 表示0个或任意多个X X+ 表示1个到任意多个X (大于等于1个X) X{n} 表示n个X n代表一个数字 X{n,} 表示n个X到任意多个X (大于等于n个X) X{n,m} 表示n个到m个X

比如:定义6位数字 [0-9][0-9][0-9][0-9][0-9][0-9] \d\d\d\d\d\d \d{6}

  • 分组 (): 表示分组,可以将一系列正则表达式看做是一个整体 分组是可以使用”|”表示或的关系 比如: (+86|0086)?\s?\d{11} +86 13800138000 +0086 13800138000 (+86|0086)?\s*\d{11} +86 13800138000

  • 便捷匹配: ^ 代表字符串的开始 $ 代表字符串的结束


上一篇 集合

Comments

Content