java新手,如有错误,请多多指教!
java中有一个类很特殊,就是String 这个类表示字符串的意思,与基本类型不同的是他的值是存储在内存堆中的,而基本类型是存储在栈中的,别的引用类型是要用new生成对象,而它是既可以用new生成对象,也可以直接用=赋值,鉴于基本类型和引用类型之间,当然本质是引用类型,这种形成的原因是String类底层是finall的数组。
java中的有一个方法是equals,这个方法 是 继承始类Object的,并重写了Object的方法,使得可以比较String内部的字符串内容是否相等。对于符号==是比较的是两个地址的。
如下题目:
String s1="abc";
String s2= "abc";
String s3=new String("abc");
s1==s2; true;
s1.equals(s2); true;
s1==s3; false;
s1.equals(s3) true;
如上面的,第一个是都相等 的 ,是因为java中有个字符串池的概念,java程序运行是,jvm会创建一个字符池,然后将地址给s1,当执行s2=“abc"时候,会先找字符池中有没有这个字符串,如果有直接将地址给s2。导致上面的两个结果都是true。