java选择题和答案解释_牛客网Java专项训练选择题错题解析

题目一:下面一段代码的运行结果:

public static void main(String[] args) {

int num = 0;

int count = 0;

for (int i = 0; i <=100; i++) {

num = num + i;

count = count++;

}

System.out.println(num * count);

}

答案解析:count = count++;的意思是先将count初始化的值0暂时缓存起来,然后执行count自加1变成1,最后将暂存的值0再赋值给count,整个循环过程中count都为0.

第二题:下面论述正确的是()?

如果两个对象的hashcode相同,那么它们作为同一个HashMap的key时,必然返回同样的值

如果a,b的hashcode相同,那么a.equals(b)必须返回true

对于一个类,其所有对象的hashcode必须不同

如果a.equals(b)返回true,那么a,b两个对象的hashcode必须相同

答案解析:本题主要考查Java中的“==”,equals()和hashcode之间的区别,详细参考:

http://blog.csdn.net/tiantiandjava/article/details/46988461

在java中:

==是运算符,用于比较两个变量的值是否相等;

equals()是Objec类的方法,用于比较两个对象是否相等,默认Object类的equals方法是比较两个对象的地址,跟==的结果一样。Object的equals方法如下:

public boolean equals(Object obj) {

return (this == obj);

}

hashCode也是Object类的一个方法。返回一个离散的int型整数。在集合类操作中使用,为了提高查询速度。(HashMap,HashSet等)

java中的数据类型,可分为两类:

基本数据类型:byte,short,char,int,long,float,double,boolean 它们之间使用“==”比较时,比的是两个变量的值;

复合数据类型(类):使用“==”比较时,比的是在内存中的存放地址。Java中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址。Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。如果两个对象根据equals()方法比较是相等的,那么调用这两个对象中任意一个对象的hashCode方法都必须产生同样的整数结果。如果两个对象根equals()方法比较是不相等的,那么调用这两个对象中任意一个对象的hashCode方法,则不一定要产生相同的整数结果。从而在集合操作的时候有如下规则:将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合中。如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,如果equals判断不相等,直接将该元素放入到集合中,否则不放入。

hashcode和equals的约定关系如下:1、如果两个对象相等,那么他们一定有相同的哈希值(hash code)。2、如果两个对象的哈希值相等,那么这两个对象有可能相等也有可能不相等。(需要再通过equals来判断)。

第三题:执行如下程序,输出结果是( )

class Test

{

private int data;

int result = 0;

public void m()

{

result += 2;

data += 2;

System.out.print(result + " " + data);

}

}

class ThreadExample extends Thread

{

private Test mv;

public ThreadExample(Test mv)

{

this.mv = mv;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值