String类详解(一)

1.String类详解
1.1实例化方式
1.1.1直接赋值(用到的最多)

String str="hello";//String类直接赋值

1.1.2通过构造方法赋值

String str1=new String("hello");//通过构造方法赋值

1.2 字符串相等比较
"=="比较的两个操作符的值,对于基本类型而言比较的就是值的大小,对于引用类型而言,比较的是二者指向的堆内存地址是否相同。
比较字符串内容是否相等时,使用equals()

    String str="hello";//String类直接赋值
    String str1=new String("hello");//通过构造方法赋值
    System.out.println(str==str1);  ---->false
    System.out.println(str.equals(str1));   ---->true

1.3字符串常量是所有String类的匿名对象
字符串常量定义:使用""括起来的内容字符串常量。所有字符串常量都是String类的匿名对象。

String str="hello";
System.out.println(str.equals("hello"));----->true
System.out.println("hello".equals(str));----->true

注:在进行指定字符串内容与字符串对象比较时,把字符串常量写在equals前,避免NullPointerException

String str=null;//假设由用户输入,且用户此时啥都没输
System.out.println(str.equals("hello"));---->会报NullPointerException
System.out.println("hello".equals(str));---->false

1.4两种实例化的区别
推荐使用直接赋值的方式实例化String对象
1)String类采用共享的设计模式:
JVM底层会维护一个字符串常量池(相当于字符串数组),若采用直接赋值的形式进行String类的实例化操作,那么该实例化对象(字符串内容)会自动保存在对象池中。
如果下次继续使用直接赋值的模式声明String类对象,首先在对象池中查看是否有指定内容,若有,直接引用。若没有,产生新的对象后入池,以供下次使用。

2)采用构造方法:采用构造方法实例化的String对象不会入池。要采用intern()方法手工入池
使用构造方法实例化String对象时会产生两块内存空间,其中一块为垃圾空间。

String str1 =new String("hello");//该字符串常量并没有保存在对象池之中
String str2="hello";
System.out.println(str1==str2);--->false

//采用手工入池
String str3 =new String("hello").intern();
String str4="hello";
System.out.println(str3==str4);---->true

面试题:请解释String类两种对象实例化的区别
1.直接赋值:只会开辟一块堆内存空间,并且该字符串对象可以自动保存在对象池中一共下次使用。
2.构造方法:会开辟两块堆内存空间,其中一块称为垃圾空间,那你不会自动保存在对象池中,可以使用intern()方法手工入池。
因此,一般推荐采用直接赋值的方式实例化String对象。

1.5 字符串不可变更
字符串常量不可变
字符串的 +操作 不要出现太多次,会产生大量的垃圾空间。

1.6字符与字符串 String <–>char
字符(char)用单引号括起来,字符串(String)用双引号括起来
字符串就是一个字符数组(char数组),所以在String类中支持有字符数组转换为字符串以及字符串变为字符的操作方法。
I.将char[] ->String
调用String的构造方法实现
public String(char value[]):将字符数组所有内容转为String
public String(char value[], int offset,int count):将部分字符数组的内容转为字符串(offset是起始位置,count是个数)

char[] data = new char[]{'h','e','l','l','o'};
String str=new String(data);
String str1=new String(data,2,3);
System.out.println(str);//--->hello
System.out.println(str1);//--->llo

II.将String -> char
public char charAt(int index): 取得字符串指定索引的字符,索引从0开始
public char[] toCharArray(): 将字符串变为字符数组返回

String str="hello";
char c = str.charAt(1);
char[] data=str.toCharArray();
System.out.println(c);//-->e
System.out.println(data.length);//--->5

1.7 字符串与字节的转换 String < – > byte
public byte[] getByte():将字符串全部转为字节数组
public byte[] getBytes(String charSetName):将字符串以指定编码转为字节数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值