java equal和==的区别

相关面试题
1. 假设有以下代码
String s = "hello";
String t = "hello";
char c[] = {'h', 'e', 'l', 'l', 'o'};

下列选项中返回false的语句是:()

A s.equals(t);
B t.equals(c);
C s==t;
D t.equals(new String ("hello"));
解析:答案:B
    String类重写了equal(),类型不同返回false
    A. true  s和t指向内存常量区的同一个字符串 
    B. false 一个返回字符串,一个返回对象 ;
    C. true  s和t指向内存常量区的同一个字符串 ;
    D. true equal用于比较两个对象的值是否相同,和内存地址无关
2. 有这么一段程序:
public class Test{ 
    public String name="abc"; 
    public static void main(String[] args){ 
        Test test=new Test(); 
        Test testB=new Test(); 
        System.out.println(test.equals(testB)+","+test.name.equals(testB.name)); 
    } 
}

请问以上程序执行的结果是()


A. true,true
B. true,false
C. false,true
D. false,false
 解析:答案:C
    Object 中euqals的源码如上。
    没有重写equals时,是直接用==判断.
    String中重写了equals方法。==和!=比较的是对象的引用
3. 下列java程序输出结果为()
int i=0;
Integer j = new Integer(0);
System.out.println(i==j);
System.out.println(j.equals(i));
 A. true,false
 B. true,true
 C. false,true
 D. false,false
 E. 对于不同的环境结果不同
 F. 程序无法执行
解析:答案:B
    1、基本型和基本型封装型进行“==”运算符的比较:
        基本型封装型将会自动拆箱变为基本型后再进行比较,
        因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true2、两个Integer类型进行“==”比较
        如果其值在-128127,那么返回true,否则返回false, 
        这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。
    3、两个基本型的封装型进行equals()比较:
        首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true
    4、基本型封装类型调用equals(),但是参数是基本类型:
        这时候,先会进行自动装箱,基本型转换为其封装类型,再进行比较。
4. 关于以下程序段,正确的是()
String s1="abc"+"def";//1
String s2=new String(s1);//2
if(s1.equals(s2))//3
    System.out.println(".equals succeeded");//4
if(s1==s2)//5
    System.out.println("==succeeded");//6
A. 行4,行6都不执行
B. 行6执行,行4不执行
C. 行4执行,行6不执行
D. 行4,行6都将执行
解析:答案:C
    equal比较类型,在比较值
    ==比较的是地址
5. 以下代码执行的结果显示是多少?()
public class Demo {
    public static void main(String[] args) {
        Integer i1 = 128;
        Integer i2 = 128;
        System.out.println((i1==i2)+",");
        String i3 = "100";
        String i4 = "1" + new String("00");
        System.out.println((i3==i4)+",");
        Integer i5 = 100;
        Integer i6 = 100;
        System.out.println((i5==i6));
    }
}
 A true,false,true
 B false,true,false
 C true,true,false
 D false,false,true
解析:答案:D
    对于Integer,需要注意的是赋值区间为[-128, 127]时,"=="比较是相等的。
    Integer会对区间为[-128, 127]的数字进行缓存,所以对于 i5和i6来说其实是相等的。
    超出的部分,比如i1和i2是需要重新new一个对象,所以两者不相等。
    对于 i3和i4,明显的是不相等的。
每日一句
Experience is the name every one gives to their mistakes.
经验是一个人给自己所犯的错误取的名字。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值