低端水嘛。。大家还是来看一眼 这个对象比较问题

2018-01-18 19:51:01 +08:00
 choice4
代码:
System.out.println("购物车的总金额" + c.getTotalPrice());
System.out.println(i1.hashCode()+" "+i3.hashCode());
System.out.println(i1);
System.out.println(i3);
System.out.println(i1 == i3);
System.out.println(i1.equals(i3));


这个 i1 i3 对象的类重写了 hashcode 和 equals 没有重写 toString

控制台显示如下:
购物车的总金额 1400.0
789159489 789159489
entity.Items@2f099e41
entity.Items@2f099e41
false
true



这个 false 有点懵 基础差了。。分别打印 i1 和 i3 显示出来的也都是一样的 但是==就是 false 所以说打印直接打印对象输出结果不能算是内存地址吗 这个 false 是根据什么比较的呢 以前的认识就是==比较地址 直接打印对象不就是地址吗??打印结果一样 判等为啥就是 false 呢
2281 次点击
所在节点    Java
4 条回复
choice4
2018-01-18 19:58:04 +08:00
是因为重写了 hashcode()方法。。。。。。复杂
kiddult
2018-01-19 12:17:52 +08:00
== 对比的是 JVM 里面的引用,和 hashCode、equals 之类没关系; toString 那个是因为默认采用 Object 的实现,所以两个 toString 结果是一样的

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
choice4
2018-01-19 14:36:14 +08:00
@kiddult 恩这个已经搞明白了 大哥我多问一句 那个为什么我的数据库连接运行 application 程序可以连通数据库,可以拿到数据 但是如果在 jsp 页面中调用就会抛出 ClassNotFound 异常啊
http://tieba.baidu.com/photo/p?kw=java&ie=utf-8&flux=1&tid=5521207338&pic_id=32f78f35e5dde711343d9c2cacefce1b9f166197&pn=1&fp=2&see_lz=1#!/pidc7314c2309f79052c09e98e407f3d7ca79cbd5f9/pn1
kiddult
2018-01-20 16:47:03 +08:00
@choice4 你可以看看又没有引入 mysql 的驱动包,不过总起来不推荐在 jsp 里面写逻辑,你把 jsp 当成模板语言,然后配合 spring mvc 会好一些

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/424028

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX