String、Object、包装类的常用方法以及注意点

  

String类

1.1String的两种实例化方式

     a.直接赋值 String str=“hello”;

     b.通过构造方法实例化String对象

1.2字符串相等比较

    str.equals(str1)

    public boolean equals(String str1)

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

小tips:在日后的开发过程之中,如果要判断用户输入的字符串是否等同于特定字符串,

一定要将特定字符串写在前面,避免NullPointerException。

1.4 String类两种实例化的区别

  •   采用直接赋值:

String str1 = "hello" ;

String str2 = "hello" ;

String str3 = "hello" ;

System.out.println(str1 == str2); // true

System.out.println(str1 == str3); // true

String类的设计使用了共享设计模式

在JVM底层自动维护一个字符串对象池(对象数组)。

如果采用直接赋值的模式进行String类的对象实例化操作,此对象将自动保存到对象池中,

如果下次继续采用直接赋值的模式声明String、对象,先去对象池中找是否有指定内容,如

果有,直接引用。如果没有,开辟新空间而后将其保

2.采用构造方法

在String类中提供有方法入池操作public String intern() ;(字符串手工入池操作:)

面试题:请解释String类中两种对象实例化的区别

1. 直接赋值:只会开辟一块堆内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用。

2. 构造方法:会开辟两块堆内存空间,其中一块成为垃圾空间,不会自动保存在对象池中,可以使用intern() 方法手工入池。

因此,我们一般会采取第一种方式即直接赋值。

1.5字符串不可变更

字符串一旦定义不可改变

所有的语言对于字符串的底层实现,都是字符数组,数组的最大缺陷就是长度固定。在定义字符串常量时,它的内 容不可改变。

原则: 1. 字符串使用就采用直接赋值。 2. 字符串比较就使用equals()实现。 3. 字符串别改变太多。

1.6字符与字符串******

String<->char

  • 字符数组char[]<->String

public String(char[ ] value1);

public String(char[ ] value1,int offset,int count);

  • 将字符串按照索引转为单个字符

String->char

public char charAt(int index)取得制定索引的字符返回

  • 将字符串转为字符数组

String->char[ ]

public char[ ] yoCharArray();

6.字节与字符串

6.1 byte[]->String

String类构造方法

public String(byte[] bytes)

String->byte[]

****************public byte[] getBytes()******************

public byte[] getBytes(String charset):按照指定编码转为字节数组。

7.字符串比较

7.1 不区分大小写的相等比较

public boolean equalsIgnoreCase(String anotherString)

7.2 比较两个字符串的关系

public int compareTo(String anotherString)

  • >0 :表示本字符串大于目标字符串
  • =0:表示两者相等
  • <0:表示本字符串小于目标字符串

8.字符串查找

8.1判断指定字符串是否存在

public boolean contains(CharSequence s)

8.2 判断是否已指定字符串开头

public boolean startswith(String prefix)

public boolean startswith(String prefix,int offset)

8.3判断是否已指定字符串结尾

public boolean endswith(String suffix)

9.字符串替换

public String replaceAll(String regex,String replacement)

将目标字符串全部替换

str.replaceAll("l","_"):将全部的l换成—

10.字符串拆分(******)

public String[].split(String.regex):将字符串全部拆分

public String[].split(String.regex,int.limit):将字符串部分拆分 特殊字符需要转义后拆分\\

eg:\\.

11.字符串截取(*****************)

public String substring(int beginIndex):从指定索引截取到结尾

public String substring[int beginIndex,int endIndex):从指定索引截取部分内容

12.字符串的其他操作方法

a.去除字符串的左右空格,保留中间空格

b.字符串转大小写(全部大小写)

public String toUpperCase();

public String toLowerCase();

c.判断字符串是否为空字符串(" ",不判断null)

public boolean isEmpty();

3.两只sb(StringBuffer,StringBuilder)-面试

1字符串拼接方法 public synchronized StringBuffer append(各种数据类型 );

2.StringBuffeer与String的相互转换 String->StringBuffer:

a. append()

b. 调用StringBuffer的构造方法new StringBuffer("");

StringBuffer->String

调用StringBuffer.toString();

3.StringBuffer常用操作方法

3.1字符串反转

reverse():StringBuffer

3.2删除指定范围的数据

delete(int start,int end):

StringBuffer insert(int offset,各种数据类型):

StringBuffer 请解释String,StringBuffer,StringBuilder的区别:

1.String的内容不可改变,两只sb可以改变。

2.StringBuffer(JDK1.0),采用同步处理,线程安全,效率较低。

StringBuilder(JDK1.5),采用异步处理,线程不安全,效率较高,当在String对象进行“+”,

编译时会将String类变为StringBuilder进行append()处理。

Object类(RealFather)-最高参数统一化

Object是JDK默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的。

默认会继承Object父类。 即,所有类的对象都可以使用Object进行接收。

4.1 toString()-取得对象信息

  • 系统输出默认调用对象的toString()方法。

Object类toString()只是简单输出当前所引用的类名称以及对象地址。

如果想在类中取得本类属性信息,需要覆写toString();

4.2 equlas()-对象比较

4.3接收引用数据类型。

Object可以接收所有引用数据类型:数组、类、接口。

5.包装类-使用Object接收一切东西 包装类就是将基本数据类型封装到类中。

5.1 包装类的分类

a.数值型包装类(Number的直接子类):byte、double、short、long、float、integer(int)

会发生类型转换异常.NumberFormatException

b.对象型包装类(object的直接子类):Boolean、character(char)

5.2 装箱与拆箱

装箱:将基本数据类型变为包装类对象。利用每个包装类提供的构造方法实现。

拆箱:将包装类中包装的基本数据类型取出。利用xxValue();

对于Integer var = ? 在[-128-127]的赋值,Integer对象在常量池中产生,回复用已有对象;这个区间外的所有数据,都在堆上产生,不回复用已有对象。

结果:true

           false

阿里编码规范:int or integer?

  • 【强制】所有的 POJO 类(简单Java类,类中只有成员变量、构造方法、getter/setter)属性必须使用包装数据类型。
  • 【强制】RPC 方法的返回值和参数必须使用包装数据类型。
  • 【推荐】所有的局部变量使用基本数据类型。

5.3 包装类与字符串的转换

5.3.1 String->基本数据类型

包装类。parseXX(str);

String ->int:Integer.parseInt(str);

5.3.2 基本数据类型->String

a. ""+基本数据类型

b.String类提供的静态方法valueOf(基本类型),此方法不产生垃圾

猜你喜欢

转载自www.cnblogs.com/GO-lq/p/9892830.html