Object.HashCode()——居然是Java Native方法
学Java目前为止已近有1年有余。。。
今天在研究代码的时候发现平时常用的Object类中 的 HashCode()方法,竟然没有实现。。。
莫名开始好奇,光记得写类的时候不重写toString()方法 ,打印的时候会自动调用Object的toString()方法,而Object类中的toStirng ()是打印 类名@hashcode,toString()中也是调用的HashCode()方法。。。想到这就开始茫然了,HashCode()不是没有实现么,怎么打印出内容。
不思不得其解,不停的做实验结果都是打印出了HashCode,偶然间突然发现Object中的HashCode()是这样写的:
Java代码
- //关键点 Native
- public native int hashCode();
----------------------------------------------------------------------------------
查找了点关于Native的说明(PS:惭愧这么久了才注意到Native这个关键字)
native是与C++联合开发的时候用的!java自己开发不用的!
使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。
1。native 是用做java 和其他语言(如c++)进行协作时用的也就是native 后的函数的实现不是用java写的 2。既然都不是java,那就别管它的源代码了,呵呵
native的意思就是通知操作系统,这个函数你必须给我实现,因为我要使用。所以native关键字的函数都是操作系统实现的, java只能调用。
java是跨平台的语言,既然是跨了平台,所付出的代价就是牺牲一些对底层的控制,而java要实现对底层的控制,就需要一些其他语言的帮助,这个就是native的作用了
补充:
Java Object.hashCode()返回的是对象内存地址?不是!
OpenJDK8 默认hashCode的计算方法是通过和当前线程有关的一个随机数+三个确定值,运用Marsaglia's xorshift scheme随机数算法得到的一个随机数。和对象内存地址无关。
转载自:
https://xiaotao-2010.iteye.com/blog/1249006
https://www.jianshu.com/p/be943b4958f4
Object.HashCode()——居然是Java Native方法相关推荐
- JNI/NDK开发指南(二)——JVM查找java native方法的规则
转载请注明出处:http://blog.csdn.net/xyang81/article/details/41854185 通过第一篇文章,大家明白了调用native方法之前,首先要调用System. ...
- Java本地方法/Java native方法/JNI
一.什么是JNI? JNI是 Java Native Interface的缩写,又叫Java本地方法/Java native方法.用于Java代码和其他语言写的代码进行交互.使用java与本地已编译的 ...
- Java Native 方法
Java 调用别的语言写的方法 1.什么是Native Method 简单的说就是Java调用其他非Java代码的接口,一个Native Method是这样的一个Java方法:该方法的实现是由非Jav ...
- java native方法
Java 中的native方法是用做java 和其他语言(如c++)进行协作时使用的,也就是native 后的函数的实现不是用java写的. 既然都不是java实现,那就别管它的源代码了,我们只需要知 ...
- java native方法使用
一.前言 今天在看java.lang.System源码的时候看到了System静态代码块中有一个registerNatives方法,该方法是被 native关键字修饰. public final cl ...
- java native方法_并发系列-native函数回调Java方法原理实践
写在前面 上一篇分享了Java调用native函数过程原理实践,文章最后留了一个问题,本章主要对C程序回调我们的Java程序原理进行实践. 调用C程序之后他是怎么知道来调用我们我们的哪个方法?又是如何 ...
- Java native方法availableProcessors()获取处理器数量的底层C++实现
夫陶公清风千古,余又何人,敢称庶几 个人博客地址:http://blog.breez.work
- Java native方法String转char*以及String[]转char**
JNIEXPORT void JNICALL Java_swap_swap_1float(JNIEnv *env, jclass cla, jstring in, jstring out)char * ...
- java native方法及JNI实例
1.参考文献: http://blog.csdn.net/youjianbo_han_87/article/details/2586375 http://blog.csdn.net/yangjiali ...
- java clone方法_java安全编码指南之:方法编写指南
简介 java程序的逻辑是由一个个的方法组成的,而在编写方法的过程中,我们也需要遵守一定的安全规则,比如方法的参数进行校验,不要在assert中添加业务逻辑,不要使用废弃或者过期的方法,做安全检查的方 ...
最新文章
- c++ 结构体赋值_《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事
- 【问链财经-区块链基础知识系列】 第二十一课 区块链应用于大宗商品供应链金融
- 在python中、如果异常并未被处理或捕捉_7、Python-异常
- sql server 部署_将程序包部署到SQL Server集成服务目录(SSISDB)
- c语言switch语句可以用在数组上吗,Microchip工程师社区 - C语言switch语句不能给数组吗? - Microchip C语言编译器论坛 - 麦田论坛...
- 不要放弃你的自由——答一些网友的评论
- 解决springboot上传文件报错:The field XXX exceeds its maximum permitted size of 1048576 bytes
- 五步教你快速搭建http代理
- 基于java+ssm+mysql的大学生考勤管理系统及智能分析系统
- 九连环解法java版
- 08 web原理与web测试
- 函数:GetDistance,计算两个经度纬度之间距离
- 《Unity3D人工智能编程精粹》笔记
- 融汇小学计算机课程,《小学信息技术行走课堂》读书心得
- SpringCloud Alibaba 微服务 — 微服务网关 Gateway
- Python 数学运算库Numpy入门基础(一)创建数组
- 警告 warning: NUL charactor seen; rest of line ignored
- 候选公示!高工智能汽车金球奖第四批入围年度产品/方案亮相
- v-charts legend设置排列对齐的方法
- Building a Crosswalk application
热门文章
- python手动安装依赖包
- 【更新】互联网公司可投之参考
- 昆仑通态复制的程序可以用吗_第478期丨相同功能带定时器的PLC程序怎么简化?非标设备出口到日本,应该怎么配电。...
- 深入浅出学大数据(一)大数据发展历程及大数据的简单介绍
- 知网caj怎么打开?如何将CAJ转Word?
- 【Linux】快速入门gdb调试工具
- y480 linux无线网卡驱动,联想y480无线网卡驱动下载-联想y480笔记本网卡驱动v15.0.0.75 官方版 - 极光下载站...
- MySQL数据增加语句
- putty怎么进入文件夹_putty命令
- 十段均衡器开源 android,音频EQ(均衡器) - osc_1jvmu893的个人空间 - OSCHINA - 中文开源技术交流社区...