String内容比较和实例化的两种方式比较

20160321修改:
添加了String实例化的两种方式

Java中判定字符串一致的方法:

调用equals(object)方法

string1.equals(string2);比较当前对象string1包含的值与参数对象(string2)包含的值是否相等,若相等则返回true,否则返回false

equals方法在比较时考虑字符串的大小写区别,
equalsIgnoreCase()可以忽略大小写而进行字符串的比较。

使用比较运算符==

比较运算符是比较两个对象是否引用同一个实例。
注意:new出来的string都会开辟一个新的堆内存空间,分配新的地址。

1
2
3
4
5
String str1="Hello";
String str2=new String("Hello");
String str3="Hello";
System.out.println(str1==str2);//输出false
System.out.println(str1==str3);//输出true!

Java中判断字符串大小

compareTo()方法

实质:根据字符的ASCII码值进行比较
字符串对象小于给定字符串:compareTo()方法返回小于零的值;
字符串对象等于给定字符串:compareTo()方法返回零;
字符串对象大于给定字符串:compareTo()方法返回大于零的值;
返回值其实就是第一个不同的字符串ASCII码的差值

String实例化的两种方式

直接赋值法

如果采用直接赋值的形式,那么就好比将一个字符串的常量赋值给了指定的字符串变量,而且每一个字符串常量都属于String的匿名对象。
在Java中,若字符串对象使用直接赋值方式完成,如strA,那么首先在第一次,定义字符串的时候,会自动的在堆内存中定义一个新的字符串常量,如果后面还有其他字符串的对象,采用的是直接赋值的方式实例化,并且内容已经存在,那么就不会开辟新的字符串常量,而且让其指向已有的一块儿内存,这种方式称为共享设计模式

共享设计模式

所谓的共享设计模式,是指在JVM底层,准备出一个对象池,如果现在按照某一特定方式进行对象实例化的操作,那么此对象的插入会被保存到对象池中,而后如果还有其他的对象也采用了固定的方式声明了与之同样的内容,则此时将不会重新保存新对象到对象池中,而是从对象池中取出已有的对象继续使用,这样一来可以有效的减少垃圾空间的产生。

构造方法实例化

1
String str=new String ("Hello");

此时会开辟新的堆内存空间,通过构造方法创建的对象,无法自动地进行入池的操作,即无法共享。
在String中提供了一个方法public String intern();帮助用户手工入池。