String,Object,包装类常用方法及其知识点

final class String (只有使用权,没有修改权) 

1、实例化方式 直接赋值 String str = "Hello world"; 构造方法赋值 String str = new String ("new world");

2、*****字符串的相等比较***** "=="操作符用于比较两个变量的值是否相等,对于基本类型而言,比较的就是数值大小;对于 引用类型而言,比较的实际上是保存的地址是否相等而不会比较内容。 所以在字符串内容比较时,需要使用String类提供的equals( )方法,

区分大小写。 str.equals (str2);

equalsIngoreCase( )不区分大小写比较。

面试题:请解释String类 == 与 equals 的区别

1. ”==”:进行的数值比较,比较的是两个字符串对象的内存地址数值。

2. “equals()”:可以进行字符串内容的比较

3.String类的匿名对象(没起名字的时候) 所有字符串常量 " ",都是String类的匿名对象 在比较字符串是否等于特定字符串时,将字符串常量写在equals前,通过字符串常量来比 较"Hello world".equals(str);

4.两种实例化区别?

直接赋值与构造赋值

String str1 = "hello" ;

String str2 = "hello" ;

String str3 = "hello" ;

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

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

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

     在JVM内部会维护一个字符串常量池(对象数组)。若采用直接赋值的方式进行String类的实 例化操作,那么对象赋值的方式实例化String对象,先在对象池中寻找是否有指定内容对象, 若有,直接引用。否则创建空间,将新对象入池以供下次使用。

构造方法:

String str = new String("hello") ;

     当使用构造方法实例化字符串时,实际上会开辟两次空间。 实例化后的对象并不会保存在对象池中,可以使用intern( )方法来手工入池

String str = new String("hello").intern( ) ;

5.字符串常量不可变更:堆中常量的值无法修改,但是栈中的指向可以修改 字符串不要改变太多次,慎用"+"

6.char<-->String char[]-->String(char[] value)

将字符数组全部转为字符串

public String(char[] value,int offset,int len): 将字符数组的部分内容转为字符串

String-->char public char charAt(int index):取得字符串指定索引的字符,从0开始

String-->char[] public char[] toCharArray():将字符串转为字符数组

7.byte<-->String 字节用在二进制流与网络传输中

byte-->String public String(byte[] value);将字节数组全部转为字符串

public String(byte[] value,int offest,int len):将字节数组的部分内容转为字符 串

String-->byte[] public byte[] getBytes():将字符串转为字节数组

public byte[] getBytes(String charSet):将字符串按照指定的编码格式转为字节数组 Linux默认编码为UTF-8,windows磨人默认编码为GBK. 编码:将字符串按照怎样的算法转为字节

8.字符串比较方法

比较相等 equals equalsIngoreCase

比较大小 public int compareTo(String anotherString):

比较两个字符串的大小关系

负数:小于

正数:大于

0:相等

按照ASCII码比较,只要发现不相等的内容算出差值直接返回,不会继续向下查找

9.字符串查找方法 (课件1,6,7,8) contains indexOf : int startsWith endsWith

10.字符串替换

public String replaceAll(String regex,String replacement):

替换首个内容

String str = "helloworld" ;

System.out.println(str.replaceAll("l", "_"));

System.out.println(str.replaceFirst("l", "_")

11.*****字符串拆分*****

public String[] split(String regex):按照指定格式将字符串全部拆分

public String[] split(String regex,int limit):将字符串部分拆分,数组长度为 限定limit长度

String str = "hello world hello bit" ; String[] result = str.split(" ") ; // 按照空格拆分

for(String s: result) {

     System.out.println(s);

}

12.*****字符串截取*****

public String substring(int beginIndex):从指定索引开始截取字符串结尾

public String substring(int beginIndex,int endIndex):从指定索引开始到指定

结束位置

String str = "helloworld" ;

System.out.println(str.substring(5));

System.out.println(str.substring(0, 5));

13.其他方法

trim():去掉字符串的左右两边空格,中间保留

toUpperCase():将字符串转大写处理

toLowerCase():将字符串转小写处理

length():将字符串转小写处理

isEmpty():判断空字符串对象,不能判断空对象

14.两SB:

为了方便进行字符串内容的修改

StringBuffer()

字符串拼接使用append()方法

String<-->StringBuffer:

a.通过StringBUffer的构造方法 public StringBuffer(String str)

b.通过append(String str):

StringBuffer

StringBuilder-->String:

调用StringBuffer的toString()

独有方法:

字符串反转:reverse()

删除指定位置字符串:delete(int start,int end)

在指定位置插入任意元素:insert(int offset,各种数据类型 b)

StringBuilder

面试题:

请解释String,StringBuffer与StringBuilder的区别

① String常量内容不可修改,而StringBuffer与StringBuilder的内容可以修改。

② StringBuffer 使用同步处理,线程安全,性能较低;StringBuilder使用异步处理,线 程不安全,性能较高。在普通场景下,推荐使用StringBuilder。当String对象使用"+"进 行字符串拼接时,javac编译器会将String对象变为StringBuilder而后调用append()来修 饰字符串内容,减少无用空间的开辟。

*****Object类*****

Object类是所有类的父类,所有类默认继承Object类

toString():取得对象信息

System.out.println()系统输出对象时,默认会调用该对象的toString()

若自定义类需要进行内容的输出,需要覆写toString()

equals():比较两个对象内容

Object类提供的equals默认比较两个对象的地址是否相同

Object类可以接受所有引用类型,包括数组、类和接口

Object类是参数的最高统一类型

包装类--将基本类型封装到类中

数值型包装类(Number的子类):Byte、Short、Integer(int)、Long、Float、Double

对象类(Object的子类):Boolean、Character(char)

装箱与拆箱

装箱:将基本数据类型变为包装类对象,通过每个包装类的构造方法实现装箱处理

拆箱:将包装类中包装的数据数据类型取出,利用包装类提供的xxValue()方法 Integer提供的intValue(); 自动拆装箱机制(JDK 1.5)

Integer integer = 10;(装箱)

System.out.println(integer+10); (拆箱)

使用包装类与使用基本类型在用法上基本一致

用基本类型还是包装类?

① [强制]所有POJO(简单java类,类中只有属性与getter/setter,构造方法)类使用包装类

② 局部变量推荐使用基本类型

包装类进行数值比较使用equals方法 对于Integer var = ?直接赋值在-128~127区间内的赋值,Integer对象在缓存池产生,会 复用已有对象。在这个区间外的所有数据均在堆上产生,并且不会复用已有对象。

猜你喜欢

转载自blog.csdn.net/family_love_1998/article/details/88382400