java字符串是一个类,是java虚拟机在启动的时候会实例化9个对象池,其中9个对象池分别用来存储8种基本数据类型(int,float,double,byte,boolean,short,long,char)的包装类和String对象。
Java String创建对象有两种方式,其中一种是通过直接创建:String str1="Stringhello",另外一种是通过构造函数:String str2=new String("stringhello");前者是通过在对象池里面取对象,后者是直接生成的一个对象。String str3="111"; String str4="111"; system.out.println(str3==str4);==>>输出为:true.这是因为str3和str4都是通过对象池获取,然而通过String str5=new String("111");system.out.println(str3==str5);==>>输出为:false.这是因为str3是通过对象池获取,而str5是直接创建,故而性质不同;
== :这种比较方法引用性质要相同才是true,而equal()方法则只需要值相同即可。
String与StringBuffer的区别
* 对String类来说,它实现了父类的equals方法,比较的是字符串值的大小;而StringBuffer则不一样,它并没有实现equals方法,
* 而是将俩个引用直接比较,所以sb.equals(tb)输出false。hashcode()方法也是一个道理。
* 特别要说的是, 一个类的equals方法和hashcode方法必须一致,例如:x.equals(y)为true;那么x.hashcode()和y.hashcode()就必须相同。
String类标示内容不可以改变的字符串,StringBuffer类标示内容可以被修改的字符串。
String覆盖了equals方法和hashCode方法,二StringBuffer没有覆盖equals方法和hashCode方法;
String s="abc";
String t=new String("abc");
System.out.println(s==t); false
System.out.println(s.equals(t));true
System.out.println(s.hashCode()==t.hashCode());true
StringBuffer sb=new StringBuffer("abc");
StringBuffer tb=new StringBuffer("abc");
System.out.println(sb==tb);false
System.out.println(sb.equals(tb));false
System.out.println(sb.hashCode()==tb.hashCode());false
final、finally与finalize的区别
final用于声明属性,方法和类,分别表示属性不可变方法不可覆盖类不可继承。内部类要访问局部变量,局部变量必须定义final类型。
finally是异常处理语句结构的一部分表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候回调用被回收对象的此方法。