String中的“==”和equals()方法使用

来源:互联网 发布:psp马甲卡淘宝 编辑:程序博客网 时间:2024/06/06 02:50
下列java程序的输出结果为____。                          
public class Example{    String str=new String("hello");    char[]ch={'a','b'};    public static void main(String args[]){        Example ex=new Example();        ex.change(ex.str,ex.ch);        System.out.print(ex.str+" and ");        System.out.print(ex.ch);    }    public void change(String str,char ch[]){        str="test ok";        ch[0]='c';    }}


解析:
String是引用数据类型,在作为参数传递时,和基本数据类型一样传递的是值,不改变原对象的值,
所以在本题中,调用change函数之后,在主函数中输出的str的值不变,还是hello。
char 作为引用数据类型,传递的是值。所以change函数调用之后,会改变内部的值,输出结果就是cb。


对于值传递和引用传递的解析:
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。 所以对引用对象进行操作会同时改变原对象.
一般认为,java内的传递都是值传递.

 关于以下程序段,正确的说法是(C   )
 
 String  s1=”abc”+”def”;  String  s2=new  String(s1);  if、(s1= =s2)     System.out.println(“= = succeeded”);  if (s1.equals(s2))     System.out.println(“.equals()  succeeded”);


A、行4与行6都将执行            B、行4执行,行6不执行
C、行6执行,行4不执行         C、行4、行6都不执行

有如下程序段:
     
  int a = b = 5;       String s1 = "祝你今天考出好成绩!";       String s2 = s1;


则表达式a == b与s2 == s1的结果分别是:( A)。
       A、true与true               B、false与true 
       C、true与false                D、false与false


解析:
==对于引用数据类型比较的是地址,
String作为参数传递时传递的是值
对于值类型:“==”比较数值是否相等,值类型没有equals方法
对于引用类型:
如果该类型没有重载equals方法,则“==”和“equals”方法返回的结果一致,即比较两个变量引用的地址是否相等
如果重载了equals方法,则equals方法的行为需要看重载方法的具体定义,“==”依然比较的是两个变量的引用地址


对String和基本数据类型包装类,内部已经重写了equals方法,bia。
注意:重写equals方法的时候通常有必要重写hashcode方法,hashcode用于返回对象的哈希值,当对象相同时,它们的哈希值一定相同。当哈希值相同时,其对象不一定相同,再用equals去比较。在进行对象判断时,先判断其hashcode是否相同,如果不同,就没有必要再去用equals比较,这就减少了equals的使用次数。
原创粉丝点击