Java中三个特殊类String,Object,包装类

1、String类

1.1 String 类全称:java.lang.String

两种实例化方式:

  • a、直接赋值:
    String str = “fei”;
    只有String类可以这样直接赋值,其他的类需要用new关键字
  • b、通过构造方法实例化String对象(传统方法)
    String str = new String(“fei”);(String类是一个类)

1.2字符串相等的比较方法:

	public boolean equals (String anotherString):( 成员方法,使用时通过对象调用)
	使用方法(比较字符串str1和str2):
		str1.equals(str2);

	注意:
	str1 == str2 比较的是两个字符串的 地址是否相同
	用equals比较字符串比较的是两个字符串的内容是否相同

看代码:
在这里插入图片描述

1.3 字符串常量是String类的匿名对象

具体看代码:
在这里插入图片描述

  • 一点小建议:在以后开发工作中,如果要判断用户输入的字符串是否等同于另一个指定的字符串,一定要将指定的字符串写在equals前面,避免用户输入的是空字符串,导致空指针异常。例子如下
    在这里插入图片描述
    在在上边说过,==与equals的区别( = = 比较的是地址而不是值),那来看看下边这段代码的执行结果:
    在这里插入图片描述
    既然 ==比较的是两个对象的地址,那么为什么这明明是两个对象,结果还是true呢???

原因是:

在JVM底层会自动维护一个字符串的对象池(本质就是一个对象数组),如果现在采用直接赋值的方式进行String类是对象实例化,该对象会自动保存在对象池中,如果下一次继续使用直接赋值的方式对String类对象进行实例化,此时对象池中若有指定内容的字符串,就会直接引用(不会再开辟新空间);如果没有该对象,则在开辟新空间并将其保存在对象池中。(如果使用的是有new的方式来实例化对象,有一个new就会开辟一块空间)

手工入池:
public native String intern(); — 这是一个本地方法
使用方法:对象.intern();

1.5 字符串常量一旦定义不可改变:

所谓字符串常量一旦定义不可改变是指:所有的语言对于字符串的底层实现,都是字符数组,数组的最大缺陷就是长度固定。在定义字符串常量时,它的内容不可改变,说到这可能有些人还是不太理解,请看下面这段代码:
在这里插入图片描述
虽然肉眼观察会发现字符串内容改变了,但是实际上改变的只是字符串对象的改变而非字符串常量的改变。具体分析请看下图:
在这里插入图片描述
因此在用字符串时,有以下几点建议:

  • 字符串采用直接赋值的方式
  • 字符串比较实用equals
  • 字符串别进行过多的+操作

1.6 字符与字符串的相互转换的方法

  • a、将字符型数组转化为字符串
    public String (char[] value)
    public String (char[] value, int offset, int count)//offset : 开始下标 count:数量
  • b、将字符串转化为单个字符
    public char charAt(int index)
  • c、将字符串转化为字符数组
    public char[] toCharArray();
  • d、取得字符串长度
    public int length()

1.7 字节(byte)与字符串

  • a、将字节数组转换为字符串
    public String (byte[] value)
    public String (byte[] value, int offset, int count)
  • b、将字符串转换为字节数组
    public byte[] getBytes ()
  • c、将字符串按照指定编码转为字节数组
    public byte[] getBytes (String charsetName)//charsetName:编码

1.8 字符串比较

  • a、不区分大小写相等比较
    public boolean equalslgnoreCase (String anotherString)
  • b、比较两个字符串大小
    public int compareTo (String anotherString)
    //返回0 — 两个字符串相等
    //返回大于0 — 大于比较对象
    //返回小于0 — 小于比较对象

1.9 字符串查找

	public boolean contains  (String str)  ---   判断str在本字符串中是否存在
	public boolean startsWith (String str)  ---  判断是否以指定字符串开头
	public boolean startsWith (String str, int index)  ---  判断从指定位置开始是否以指定字符串开头
	public boolean endsWith (String str) ----  判断是否以指定字符串结束

1.10 字符串替换

	 public Str ing replaceAll (String regex, String replacement) --- 替換所有指定内容
	 //其中regex表示要替换的是什么,replacement表示用什么替换
	 public Str ing replaceFirst (Str ing regex, Str ing replacement) --- 替換第一-次出現的指定内容

1.11 字符串拆分

	public String[] split(String regex) --- 將字符串按照指定指定格式全部拆分
	public String[] split(String regex, int limit)
	//按.拆分要用:対象. split(str, "い\. ")

1.12 字符串截取

	 public String substr ing (int beginIndex) ---从指定位置截取到字符串結尾
	 public String substr ing (int beginIndex, int endIndex) --从指定位査截取到指定位置[) (左閉右幵)

1.13 String 类的其他方法

转大小写(全部转):
	public Str ing toUpperCase(); --- 转大写
	public String toLowerCase0; --- 转小写
判断字符串是否カ空(只能判断是否カ空字符串而不能判断 nul I 
	public boolean isEmpty() ;
注意:null.isEmpty(str) --- 会报错(空指针异常)

1.14两个sb类(********> -方便进行字符串的修改 - java, lang

StringBuffer类
  • a、字符串修改
    public Str ingBuffer append (各种数据类型的数据) ;
  • b、Str ing和Str ingBuffer的相互转换
    String -> Str ingBuffer :调用Str ingBuffer的构造方法或append ()
    StringBuffer -> String :调用Str ingBuffer. toStr ing(方法
  • c、 字符串反转
    public Str ingBuffer reverse () ;
    用法: Str ingBuffer对象. reverse() ;
  • d、删除指定范围数据
    public Str ingBuffer delete(int start, int end) ;
  • e、插入数据
    public Str ingBuffer insert (int offset, 各种数据类型的数据)
Str ingBuild类
用法:和Str ingBuffer-样

String、StringBuffer和StringBuild三个类之间的区别:

  • Str ing的内容不可修改,而两个sb可以修改内容
  • Str ingBuffer采用同步处理,线程安全,效率较低
  • Str ingBuilder采用异步处理,线程不安全,效率较高Str ing"+ '底层会将String -> 转为Str ingBuffer (避免产生较多的垃圾空间)

2、Object类

Object炎是Java默认提供的类
在Java中除了0bject类,所有的类都存在継承关系,默认会継承Object父类,所有类的対象都可以通辻Object类迸行接收

Object类中的常用方法:

1、toString()方法 — 取得对象信息

直接使用対象输出,默认輸出一-个地址编码,如果現在輸出的是String対象,此时輸出字符串内容而非地址,原因就在于String类覆写了Object类的toStr ing方法。
System. out. println;–系統輸出会默认凋用対象的toStr ing()方法
如果默认給出的toStr ing方法功能不足(不想輸出地址而想输出本类信息,需要在子类中覆写toStr ing方法〉

2、equals方法 — 比较对象

在这里插入图片描述

3、包装类

包装类 — 就是将基本类型封装到类中

3.1 包装类的分类:

  • a、对象类包装类(Object 的直接子类)
    Boolean(boolean的包装类)、Character(char的包装类)
  • b、数值类包装类
    Byte(byte的包装类)、Short(short 的包装类)、Long(long的包装类)、Double(double的包装类)、Float(float的包装类)、Interger(int的包装类)

3.2 装箱与拆箱 — 基本数据类型与相应包装类的数据处理

  • 装箱 :将基本数据类型变为包装类对象,利用包装类提供的方法实现装箱
  • 拆箱:将包装类对象的值取出来变为基本数据类型(利用Number类提供的xxValue() 实现拆箱处理)

阿里编码规范:所有相同类型的包装类对象之间的值进行比较,全部使用equals方法

  • 使用Integer定义的变量:对于Integer a = ? — 在 [-128 - 127]以内进行赋值,Integer对象会在Integer对象池中产生,如果对象存在,会复用已有对象,不会再开辟新空间,在这个区间范围以外,则数据会在堆上产生不会复用已有对象。

  • 对于以后写代码中用int还是Integer,有一下几点建议:
    a、[强制]所有POJO类(简单java类)的属性必须使用包装类型
    b、[强制]RPC方法的返回值和参数必须使用包装类型
    c、[推荐]所有的局部变量使用基本数据类型

3.3 字符串和基本数据类型的转换:

  • 将字符串转为基本类型 — 调用各个包装类
    .praseXX(String str)
    例如:Interger.parseInt(String str);
  • 将基本数据类型转为字符串
    a、用 “字符串”+基本数据类型
    b、使用String类的valueof(基本类型,静态方法) ; — 此方法不产生垃圾空间,推荐使用
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值