java迷题_Java谜题——库谜题
1、Java中的不可变对象和可变对象
(1)不可变类:当你获得这个类的实例的引用之后,你不可以改变这个实例的内容。比如:String,BigInteger,BigDecimal,还有基本数据类型的封装类,这些都是不可变类。用实例来调用方法时,不会改变里面的变量的值。代码:
importjava.math.BigInteger;public classBigProblem {public static voidmain(String[ ] args) {
BigInteger fiveThousand= new BigInteger("5000");
BigInteger fiftyThousand= new BigInteger("50000");
BigInteger fiveHundredThousand= new BigInteger("500000");
BigInteger total=BigInteger.ZERO;
total.add(fiveThousand);
total.add(fiftyThousand);
total.add(fiveHundredThousand);
System.out.println(total);
}
}
View Code
你可能认为会打印555000,但实际上打印的是0。就是因为你调用方法之后并不能改变这个对象的值。稍微修改下就可以:
importjava.math.BigInteger;public classBigProblem {public static voidmain(String[] args) {
BigInteger fiveThousand= new BigInteger("5000");
BigInteger fiftyThousand= new BigInteger("50000");
BigInteger fiveHundredThousand= new BigInteger("500000");
BigInteger total=BigInteger.ZERO;
total=total.add(fiveThousand);
total=total.add(fiftyThousand);
total=total.add(fiveHundredThousand);
System.out.println(total);
}
}
View Code
本谜题的教训是:不要被误导,认为不可变类型是可变的。这是一个在刚入门的Java程序员中很常见的错误。公正地说,Java不可变类型的某些方法名促使我们走上了歧途。像add、subtract和negate之类的名字似乎是在暗示这些方法将修改它们所调用的实例。也许plus、minus和negation才是更好的名字。
(2)可变类:当你获得这个类的实例的引用之后,你可以改变这个实例的内容。
2、HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键
(1)hashCode()方法获取给定对象的唯一整数。这个整数被用来确定对象被存储在HashTable类似的结构中的位置。默认的,Object类的hashCode()方法返回这个对象存储的内存地址的编号。
(2)equals(Object)方法
(3)接下来有两个个关于这两个方法的重要规范(我只是抽取了最重要的两个,其实不止两个):
(a)若重写equals(Object obj)方法,有必要重写hashcode()方法,确保通过equals(Object obj)方法判断结果为true的两个对象具备相等的hashcode()返回 值。
(b)如果equals(Object obj)返回false,即两个对象“不相同”,并不要求对这两个对象调用hashcode()方法得到两个不相同的数。
总之,当你覆写equals方法时,一定要记着覆写hashCode方法。
3、0的添加
千万不要在一个整型字面常量的前面加上一个0;这会使它变成一个八进制字面常量。有意识地使用八进制整型字面常量的情况相当少见,你应该对所有的这种特殊用法增加注释。
4、技巧性的问题
(1)Java5中添加了一套位操作方法。
(2)splite方法将字符串按照标志进行分割。
(3)相等的字符串常量也是相同的。
(4)Math.abs(int):“如果其参数等于Integer.MIN_VALUE,那么产生的结果与该参数相同,它是一个负数。” Math.abs不能保证一定会返回非负的结果。如果它的参数是Integer.MIN_VALUE,或者对于long版本的实现传递的是Long.MIN_VALUE,那么它将返回它的参数。
java迷题_Java谜题——库谜题相关推荐
- java迷题_Java谜题3:汽车
这个java谜题分为两部分.您必须解决此部分才能看到下一部分. 为了使发动机暖机,我们从最简单的开始.第二部分会更难. 如果你加速太快,车就会撞.但你能让它比极限快十倍吗? package car; ...
- java概念题_JAVA 概念笔试题
1.分别写出分支结构,循环结构的语法格式.循环结构:while 循环 [html] view plaincopy(init_statement); while (test_expression) { ...
- java填空题_Java语言基础知识填空题
Java语言基础知识填空题 想学java语言的人,要多做题才能巩固知识,下面小编为大家带来了Java语言基础知识的填空题,欢迎大家阅读! Java语言基础知识填空题. 1.浮点型数据根据数据存储长度和 ...
- java 变成题_Java 习题8 参考答案及解析
1.问答题 "\hello"是正确的字符串常量吗? "你好KU".length()和"\n\t\t".length()的值分别是多少? &q ...
- java逻辑题_Java蓝桥杯——逻辑推理练习题
逻辑推理题 谁是贼? 公安人员审问四名窃贼嫌疑犯.已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎.在回答公安人员的问题中: 甲说:"乙没有偷,是丁偷的.&quo ...
- java判断题_java判断题
判断题 1.Java语言有三种技术平台,分别是JavaSE.JavaME.JavaEE(T) 2.Java是一门高级计算机语言.(T) 3.Java语言具体跨平台的特性(T) 4.JDK工具中自带了一 ...
- java阅读题_java 练习题带答案
第一题 int x = 1,y=1; if(x++==2 & ++y==2) { x =7; } System.out.println("x="+x+",y=&q ...
- java 判断题_Java面试题及解析(判断题)
1.代码差错,判断代码对错,并指出错误处 abstract class Name{ private String name; public abstract Boolean isStupidName( ...
- java迷您_Java
你好,我也是JAVA初学者~ 加我一下,谢谢 QQ:846491 ----------------解决方案----------------------------------------------- ...
最新文章
- 分布式账本(Distributed ledger)
- 不知道这些,简历上千万不要说你会 Redis 持久化。。。
- BOM—浏览器对象模型(Browser Object Model)
- oracle sql execute elapsed time,SQL ordered by Elapsed Time 脚本
- maven mysql的jdbctemplate_JDBC、JDBCTemplate、MyBatis、Hiberante 比较与分析
- AI技术在空气净化机器人中的高能应用
- 贪心法——部分背包问题
- ThinkPhp学习01
- 《MYSQL必知必会》—19~21.插入、更新、删除数据;创建、更新、删除表
- 如何优雅的调用第三方接口
- 快速搭建一个端对端加密的在线聊天室
- 关于简单的factorymode
- 什么是股票量化交易策略?
- 【Python】爬取2019年男篮世界杯数据,并可视化
- oracle 倒库详细步骤,详细的“倒车入库”步骤来了!一图一解析,照着做考试轻松一把过...
- 数据分析实战项目2:优衣库销售数据分析
- 采众家之长 凯翔软件定义存储能够后来居上吗?
- axure原件 总是丢失_【总结整理】AXURE原件
- [js]在10月31日设置月份为11月,会变成12月的问题
- c语言输出函数语句,c语言输出语句及格式输出函数介绍