String类对象的两种实例化方式:
在String类里面实际上也有一个构造方法
构造方法:public String (String str),在构造里面仍然要接收一个本类对象;
字符串比较:
String也可以使用 == 比较,但是比较的不是字符串的内容,而是字符串所在的内存地址的值;
比较内容:public boolean equals(String str); 使用时是:stra.equals(strb);
面试题:
String中==和equals()区别?
- ==:是Java提供的关系运算符,主要功能是进行数值相等判断,如果用在String对象上,比较的是内存地址数值的比较;
- equals():是由String提供的一个方法,此方法专门用于负责字符串内容的比较,equals处理空
String常量为匿名对象:
使用字符数组来描述字符串,实际上没有字符串这一概念;字符串不属于基本数据类型
String的匿名对象是由系统自动生成的,不再由用户创建;
如果要判断输入的内容是否是某一个字符串,一定要将字符串写在比较函数的前面!防止有空指向问题的出现!
两种实例化方式的区别:
- 直接赋值(推荐使用):将一个字符串的匿名对象设置了一个名字;例如:String str = "hello"; 此时内存中会开辟一个堆内存(匿名对象一定会开辟一个内存空间),然后栈内存会指向堆内存,并且会自动保存在对象池中,以便下次使用;
- 构造方法:(String str = new String("字符串") ;)会开辟两块内存空间,并且不会自动入池,但是用户可以使用 intern() 方法手动入池;
字符串内容不可改变:
对于字符串内容的改变实际上是利用了引用关系的改变,但是会产生垃圾;
String不要频繁过多的修改;
String的特点:
- String类对象的相等判断使用equals()方法完成,==实现的是地址数值的比较
- 字符串内容一旦声明不可改变,String类对象的内容改变实际上是依靠引用关系的变更
- String类有两种实例化方式,使用直接赋值可以不产生垃圾空间,并且可以自动入池