我运行了跟随脚本(java),它给了我奇怪的结果。有人可以帮忙解释吗?
import java.util.Objects;
import org.apache.log4j.Logger;
public class CacheTester {
private static final Logger log = Logger.getLogger(CacheTester.class);
@Test
public void hashCodeTest() {
for (int i = 0; i < 50; i++) {
// if I remove the third parameter, it works fine
log.info(Objects.hash("getDemoCache", "1", new int[]{1, 2}));
}
}
}
记录结果(彼此不同):
//...
2015-04-29 17:43:20 INFO CacheTester:42 - 1431904540
2015-04-29 17:43:20 INFO CacheTester:42 - 1859187447
2015-04-29 17:43:20 INFO CacheTester:42 - -2146933580
2015-04-29 17:43:20 INFO CacheTester:42 - -2074242201
2015-04-29 17:43:20 INFO CacheTester:42 - 1363170000
2015-04-29 17:43:20 INFO CacheTester:42 - 1040980265
2015-04-29 17:43:20 INFO CacheTester:42 - 1639331053
2015-04-29 17:43:20 INFO CacheTester:42 - 570765746
2015-04-29 17:43:20 INFO CacheTester:42 - -2023288896
2015-04-29 17:43:20 INFO CacheTester:42 - -1892732019
2015-04-29 17:43:20 INFO CacheTester:42 - 1464306601
2015-04-29 17:43:20 INFO CacheTester:42 - 921799986
2015-04-29 17:43:20 INFO CacheTester:42 - 1037804977
//...
- - 背景 - -
我想将自己的keyGenrator用于@Cacheable批注(Spring和ehCache)。
public Object generate(Object target, Method method, Object... params) {
int key = Objects.hashCode(method.getName(), params);
log.info("key = " + key);
return key;
}
在这种情况下,我发现缓存总是丢失的。
然后,我必须更改为:
public Object generate(Object target, Method method, Object... params) {
int result = method.getName().hashCode() : 0;
result = 31 * result + Objects.hashCode(params);
return result;
}
谢谢
这是因为hashCode
for int[]
不会被覆盖。即使条目int[]
相同hashCode
,也没有理由为什么的两个实例应该具有相同的值。
试试这个:
System.out.println(new int[] {1, 2}.hashCode());
System.out.println(new int[] {1, 2}.hashCode());
您几乎可以肯定会看到两个不同的整数。
Objects.hash
与数组一起使用的一种好方法是传递Arrays.hashCode(array)
而不是实际数组。在您的情况下,您可以执行以下操作:
Objects.hash("getDemoCache", "1", Arrays.hashCode(new int[]{1, 2}))
问题内容: 我正在使用具有Spring安全性的BCryptPasswordEncoder。我的期望是,对于相同的输入,我将始终获得相同的输出。但是对于相同的输入,我得到不同的输出。您可以使用以下代码段对其进行测试: 输出:$ 2a $ 10 $ cYLM.qoXpeAzcZhJ3oXRLu9Slkb61LHyWW5qJ4QKvHEMhaxZ5qCPi 输出2:$ 2a $ 10 $ KEvYX9y
我正在使用Microsoft Graph Users API根据我们的ActiveDirectory验证用户名或电子邮件地址列表。名称搜索: https://graph.microsoft.com/v1.0/me/people/?$search=John.Smith 返回其他数据,如和。但如果我使用电子邮件搜索: null 我是否需要额外的权限来获取相同的数据? 更新:我按照下面的建议在https
简单说明:PHP实现获得正确的user_id,react.js实现获得不正确的user_id。为什么!? 我在React下用PHP和Javascript实现了Instagram基本显示API OAuth流。 PHP下的流程工作得很好--我得到一个代码,我它使用curl来,我收到一个和一个,所有这些都很好,后续的图形API请求工作得很好。 然后我用JavaScript重新构建了它。在这里,当我获得一
我正在使用带有Spring Security的BCryptPasswordEncoder。我的期望是,对于相同的输入,我总是得到相同的输出。但是对于相同的输入,我得到不同的输出。您可以使用下面的代码片段对其进行测试: 输出:$2A$10$CYLM.QOXPEAZCZHJ3OXRLU9SLKB61LHYWW5QJ4QKVHEMHAXZ5QCPI 输出2:$2A$10$kevyx9yjj0f1x3wl
问题内容: 问题 我有用于生成哈希的node.js模块。 最近,我注意到模块生成的哈希在新版本中有所不同: 码 Node.js v0.10.0 输出: Node.js v6.1.0 输出: 题 我想知道是什么导致了新版本中的问题,如何解决呢? 更新资料 GitHub上的类似问题: https://github.com/nodejs/node/issues/6813 https://github.c
} 我得到了下面的结果。但是在这个结果中,高亮显示的行具有相同的列名,但是别名不同。为什么hibernate会得到相同的Cloumn? 冬眠:删除表,如果存在hibernate_sequence hibernate:删除表(如果存在)UserDetails Hibernate:如果存在,则删除表车辆Hibernate:创建表hibernate_sequence(next_val bigint)En