学Java目前为止已近有1年有余。。。 
今天在研究代码的时候发现平时常用的Object类中 的 HashCode()方法,竟然没有实现。。。 
莫名开始好奇,光记得写类的时候不重写toString()方法 ,打印的时候会自动调用Object的toString()方法,而Object类中的toStirng ()是打印 类名@hashcode,toString()中也是调用的HashCode()方法。。。想到这就开始茫然了,HashCode()不是没有实现么,怎么打印出内容。 
不思不得其解,不停的做实验结果都是打印出了HashCode,偶然间突然发现Object中的HashCode()是这样写的:

Java代码 

  1. //关键点 Native  
  2.  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方法相关推荐

  1. JNI/NDK开发指南(二)——JVM查找java native方法的规则

    转载请注明出处:http://blog.csdn.net/xyang81/article/details/41854185 通过第一篇文章,大家明白了调用native方法之前,首先要调用System. ...

  2. Java本地方法/Java native方法/JNI

    一.什么是JNI? JNI是 Java Native Interface的缩写,又叫Java本地方法/Java native方法.用于Java代码和其他语言写的代码进行交互.使用java与本地已编译的 ...

  3. Java Native 方法

    Java 调用别的语言写的方法 1.什么是Native Method 简单的说就是Java调用其他非Java代码的接口,一个Native Method是这样的一个Java方法:该方法的实现是由非Jav ...

  4. java native方法

    Java 中的native方法是用做java 和其他语言(如c++)进行协作时使用的,也就是native 后的函数的实现不是用java写的. 既然都不是java实现,那就别管它的源代码了,我们只需要知 ...

  5. java native方法使用

    一.前言 今天在看java.lang.System源码的时候看到了System静态代码块中有一个registerNatives方法,该方法是被 native关键字修饰. public final cl ...

  6. java native方法_并发系列-native函数回调Java方法原理实践

    写在前面 上一篇分享了Java调用native函数过程原理实践,文章最后留了一个问题,本章主要对C程序回调我们的Java程序原理进行实践. 调用C程序之后他是怎么知道来调用我们我们的哪个方法?又是如何 ...

  7. Java native方法availableProcessors()获取处理器数量的底层C++实现

    夫陶公清风千古,余又何人,敢称庶几 个人博客地址:http://blog.breez.work

  8. Java native方法String转char*以及String[]转char**

    JNIEXPORT void JNICALL Java_swap_swap_1float(JNIEnv *env, jclass cla, jstring in, jstring out)char * ...

  9. java native方法及JNI实例

    1.参考文献: http://blog.csdn.net/youjianbo_han_87/article/details/2586375 http://blog.csdn.net/yangjiali ...

  10. java clone方法_java安全编码指南之:方法编写指南

    简介 java程序的逻辑是由一个个的方法组成的,而在编写方法的过程中,我们也需要遵守一定的安全规则,比如方法的参数进行校验,不要在assert中添加业务逻辑,不要使用废弃或者过期的方法,做安全检查的方 ...

最新文章

  1. c++ 结构体赋值_《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事
  2. 【问链财经-区块链基础知识系列】 第二十一课 区块链应用于大宗商品供应链金融
  3. 在python中、如果异常并未被处理或捕捉_7、Python-异常
  4. sql server 部署_将程序包部署到SQL Server集成服务目录(SSISDB)
  5. c语言switch语句可以用在数组上吗,Microchip工程师社区 - C语言switch语句不能给数组吗? - Microchip C语言编译器论坛 - 麦田论坛...
  6. 不要放弃你的自由——答一些网友的评论
  7. 解决springboot上传文件报错:The field XXX exceeds its maximum permitted size of 1048576 bytes
  8. 五步教你快速搭建http代理
  9. 基于java+ssm+mysql的大学生考勤管理系统及智能分析系统
  10. 九连环解法java版
  11. 08 web原理与web测试
  12. 函数:GetDistance,计算两个经度纬度之间距离
  13. 《Unity3D人工智能编程精粹》笔记
  14. 融汇小学计算机课程,《小学信息技术行走课堂》读书心得
  15. SpringCloud Alibaba 微服务 — 微服务网关 Gateway
  16. Python 数学运算库Numpy入门基础(一)创建数组
  17. 警告 warning: NUL charactor seen; rest of line ignored
  18. 候选公示!高工智能汽车金球奖第四批入围年度产品/方案亮相
  19. v-charts legend设置排列对齐的方法
  20. Building a Crosswalk application

热门文章

  1. python手动安装依赖包
  2. 【更新】互联网公司可投之参考
  3. 昆仑通态复制的程序可以用吗_第478期丨相同功能带定时器的PLC程序怎么简化?非标设备出口到日本,应该怎么配电。...
  4. 深入浅出学大数据(一)大数据发展历程及大数据的简单介绍
  5. 知网caj怎么打开?如何将CAJ转Word?
  6. 【Linux】快速入门gdb调试工具
  7. y480 linux无线网卡驱动,联想y480无线网卡驱动下载-联想y480笔记本网卡驱动v15.0.0.75 官方版 - 极光下载站...
  8. MySQL数据增加语句
  9. putty怎么进入文件夹_putty命令
  10. 十段均衡器开源 android,音频EQ(均衡器) - osc_1jvmu893的个人空间 - OSCHINA - 中文开源技术交流社区...