《Java 编程思想》004 switch对字符串支持的引申思考
来源:互联网 发布:运动控制卡编程 编辑:程序博客网 时间:2024/06/10 08:38
与您共读《Java 编程思想》 Page38~75
第三四章是关于Java操作符和控制流程的讲解,有语言基础无压力,可快速浏览。
《Java编程思想》是基于Java SE5,在此补充Java7的7个新特性:
1. 对集合类的语言支持;
2. 自动资源管理;
3. 改进的通用实例创建类型推断;
4. 数字字面量下划线支持;
5. switch中使用string;
6. 二进制字面量;
7. 简化可变参数方法调用。
可以了解一下Java7中的switch支持String的实现细节及编译工具gd-gui。 实质上还是通过String的hashCode方法将字符串转化为数字。并配合equals方法进行判断。通过hashCode方法判断后仍要用equals方法进行判断,hashCode相同的字符串不一定是同一字符串。
1. Java数组的最大长度
Java 中数组length属性是32位的有符号整数,它的最大值是2的31次幂,就是2G。
由此想到了String,底层也是基于数组的,是一个字符数组。字符是16位的基本类型,一个String的最大长度是多少呢?就是字符数组的最大长度也是2G,占用内存是4GB。
数组具体的实现带来的限制。这会使得实际的JVM不一定能支持上面说的理论上的最大length。
例如说如果有JVM使用uint32_t来记录对象大小的话,那可以允许的最大的数组长度(按元素的个数计算)就会是:
(uint32_t的最大值 - 数组对象的对象头大小) / 数组元素大小
于是对于元素类型不同的数组,实际能创建的数组的最大length也会不同。
JVM实现里可以有许多类似的例子会影响实际能创建的数组大小。
2. 为什么hashCode是int
int长度为32位的有符号整数,对于实际的内存大小足够用。
3. euqals方法的作用
hashCode方法和equals方法是java.lang.Object类中有两个非常重要的方法。equals()方法是用来判断其他的对象是否和该对象相等,对两个对象的地址值进行的比较,即比较地址是否相同。但是很多类覆盖了equals方法,如String。equals方法具有自反性(reflexive)、对称性(symmetric)、传递性(transitive)、一致性(consistent)。
4 hashCode方法的作用
大量对象比较时,使用预存的hashCode值比较提升效率。
5. String HashCode
s[0]*31^(n-1) + s[1]*31^(n-2) + … + s[n-1]
将上次一算出的hash值乘以31 然后再加上当前字符编码值,由于这里使用的是int肯定会有一个上限,当字符长时产生的数值过大int放不下时会进行截取,一旦截取HashCode的正确性就无法保证了,所以这点可以推断出HashCode存在不相同字符拥有相同HashCode。
就延伸到这里了后续问题继续阅读《Java 编程思想》。
参考 推荐阅读:
浅谈Java中的hashcode方法
java数组的最大长度是多少?
字符串不相同出现相同HashCode
Java的hashCode相同的字符串
Java提高篇——equals()与hashCode()方法详解
- 《Java 编程思想》004 switch对字符串支持的引申思考
- Java switch 对数字、字符、枚举、字符串类型的支持
- 对《JAVA编程思想》中一段代码的思考
- switch 对 String 的支持
- 由一道java题的思考和引申
- 转贴:Java语言的十大问题及引申思考
- 转贴:Java语言的十大问题及引申思考
- Java 7新特性: switch中对String的支持
- Java 7新特性: switch中对String的支持
- 对java编程思想的理解
- 关于对java异步编程的思考。
- 关于对java异步编程的思考。
- Java内置对字符串的支持;
- java switch支持的数据类型
- java switch支持的数据类型
- java switch支持的数据类型
- java switch支持的数据类型
- 21.JAVA编程思想——未支持的操作
- 无法对ClientDataSet.XMLData进行赋值
- 互联网协议入门(二)
- c++ 由类型转换引起的指针偏移
- 批量修改mat文件中MATLAB mpt数据对象属性
- 杭州电子科技大学程序设计竞赛(2016’12)- 网络同步赛 1003
- 《Java 编程思想》004 switch对字符串支持的引申思考
- (接上)第6题1,2,3,4,5共5个数按字典序排列
- 检验主机名是否事虚拟主机
- HOJ 2206 IP的计算
- libcstl:标准C语言通用数据结构和常用算法库
- 如何调试Android Framework?
- C++中explicit 的用法
- PAT算法笔记(二)————数字分类
- VS2015 Update 3正式版下载汇总