1.字符串的声明和初始化有两种情况
1)String str = new String ("abc");
String str1= new String("abc");
引用对象str 和str1两个内容相同的字符串对象,他们的内存的地址是不同的
只要用到new总会生成新的对象
2)String str ="abc"和String str1="abc";在JVM中存在着一个字符串池,其中保存
这许多String对象,并可以被共享,str和str1引用的是常量池里面的对象,String类
是不可变得类,一旦创建就不能被修改,String可以被共享而不会导致程序混乱
3)引申:
对于String类型的变量s。赋值语句s=null和s=""是否相同?
对于赋值语句s=null;其中s 是一个字符串引用类型,她不指向任意一个字符串,而赋值语句
s="",中s是一个字符串引用的,他指向另外一个字符串(这个字符串的值为 “”,即空字符)
所以两者是不同的;
4)String s =new String ("abc");
这一个语句可以分为两个过程实现:第一是新建对象的过程,即new String(""),第二过程就是赋值
即String s=;new String("abc")等价于“abc” 和new String()两个操作,若在字符串池不存在
“abc”,则会创建一个字符串常量“abc”,并将其添加到字符串池中,若存在,则不创建,然后new String()会在堆里创建一个
新的对象
4)常见笔试题:new String("abc")创建了几个对象;
答案:一个或者两个如果常量池中原来有"abc",那么只创建一个对象,如果常量池中原来没有字符串“abc”
,那么就会创建两个;
2.“==”,equals和hashCode什么区别?
1)”==“运算符用来比较两个变量的值是否相,也就是比较变量对应的内存中的数值是否相同,要比较两个基本类型的数据或者两个引用变量的地址
是否相等,只能用”==“运算符,但是要比较两个对象的内容是否相等不能用"==";
2)equals是Object类提供的方法之一,每个对象都有equals()这个方法,当类中没有定义到equals()方法时,他就会使用父类的equals(),这样的equals(obj)
与"=="运算符一样,都是比较引用
3)equals与”==“相比,equals(obj)方法的特点就是它可以被覆盖,通过覆盖他不再比较引用而是比较数据的内容;
例如String类中的equals(obj)是比较两个独立对象的内容是否相同,即堆中的内容是否相同
String str = new String ("abc");
String str1= new String("abc");
str==str1(结果为false);比较是否为同一对象,比较的是地址
str.equals(str1)(结果为ture),因为String类覆盖类Object的equals()方法。这时是比较内容
4)hashCode()方法是从Object中继承过来的,它也是用来鉴定两个对象是否相等,Object类中的hashCode()方法返回对象在内存中地址转换成Int值,
如果没有重写该方法,任何对象hashCode()方法都是不相等的
5)equals()与hashCode的区别:
a.equals()是给用户调用的,如果判断两个对象是否相等,可以重写equals,在代码中调用就可以判断了,对于hashCode(),用户一般不会调用,
它返回的是int类型,比较起来不直观,相当于是一个对象编码
b.hashCode()与equals()返回值的关系?
A) a.equals(b)返回true,那么这两个对象的hashCode()是必须都产生相同的整数结果,反之,a,b返回值有可能相等,也可能不相等;
B)hashCode的返回值不相等,equals()返回值不一定相等,反之一定相等
笔试题:
a.Set里的元素是不能重复的,那么用什么方法来区分是否重复?使用==还是equals()?
答:用iterator()方法来区分是否重复
1)String str = new String ("abc");
String str1= new String("abc");
引用对象str 和str1两个内容相同的字符串对象,他们的内存的地址是不同的
只要用到new总会生成新的对象
2)String str ="abc"和String str1="abc";在JVM中存在着一个字符串池,其中保存
这许多String对象,并可以被共享,str和str1引用的是常量池里面的对象,String类
是不可变得类,一旦创建就不能被修改,String可以被共享而不会导致程序混乱
3)引申:
对于String类型的变量s。赋值语句s=null和s=""是否相同?
对于赋值语句s=null;其中s 是一个字符串引用类型,她不指向任意一个字符串,而赋值语句
s="",中s是一个字符串引用的,他指向另外一个字符串(这个字符串的值为 “”,即空字符)
所以两者是不同的;
4)String s =new String ("abc");
这一个语句可以分为两个过程实现:第一是新建对象的过程,即new String(""),第二过程就是赋值
即String s=;new String("abc")等价于“abc” 和new String()两个操作,若在字符串池不存在
“abc”,则会创建一个字符串常量“abc”,并将其添加到字符串池中,若存在,则不创建,然后new String()会在堆里创建一个
新的对象
4)常见笔试题:new String("abc")创建了几个对象;
答案:一个或者两个如果常量池中原来有"abc",那么只创建一个对象,如果常量池中原来没有字符串“abc”
,那么就会创建两个;
2.“==”,equals和hashCode什么区别?
1)”==“运算符用来比较两个变量的值是否相,也就是比较变量对应的内存中的数值是否相同,要比较两个基本类型的数据或者两个引用变量的地址
是否相等,只能用”==“运算符,但是要比较两个对象的内容是否相等不能用"==";
2)equals是Object类提供的方法之一,每个对象都有equals()这个方法,当类中没有定义到equals()方法时,他就会使用父类的equals(),这样的equals(obj)
与"=="运算符一样,都是比较引用
3)equals与”==“相比,equals(obj)方法的特点就是它可以被覆盖,通过覆盖他不再比较引用而是比较数据的内容;
例如String类中的equals(obj)是比较两个独立对象的内容是否相同,即堆中的内容是否相同
String str = new String ("abc");
String str1= new String("abc");
str==str1(结果为false);比较是否为同一对象,比较的是地址
str.equals(str1)(结果为ture),因为String类覆盖类Object的equals()方法。这时是比较内容
4)hashCode()方法是从Object中继承过来的,它也是用来鉴定两个对象是否相等,Object类中的hashCode()方法返回对象在内存中地址转换成Int值,
如果没有重写该方法,任何对象hashCode()方法都是不相等的
5)equals()与hashCode的区别:
a.equals()是给用户调用的,如果判断两个对象是否相等,可以重写equals,在代码中调用就可以判断了,对于hashCode(),用户一般不会调用,
它返回的是int类型,比较起来不直观,相当于是一个对象编码
b.hashCode()与equals()返回值的关系?
A) a.equals(b)返回true,那么这两个对象的hashCode()是必须都产生相同的整数结果,反之,a,b返回值有可能相等,也可能不相等;
B)hashCode的返回值不相等,equals()返回值不一定相等,反之一定相等
笔试题:
a.Set里的元素是不能重复的,那么用什么方法来区分是否重复?使用==还是equals()?
答:用iterator()方法来区分是否重复