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谜题——库谜题相关推荐

  1. java迷题_Java谜题3:汽车

    这个java谜题分为两部分.您必须解决此部分才能看到下一部分. 为了使发动机暖机,我们从最简单的开始.第二部分会更难. 如果你加速太快,车就会撞.但你能让它比极限快十倍吗? package car; ...

  2. java概念题_JAVA 概念笔试题

    1.分别写出分支结构,循环结构的语法格式.循环结构:while 循环 [html] view plaincopy(init_statement); while (test_expression) { ...

  3. java填空题_Java语言基础知识填空题

    Java语言基础知识填空题 想学java语言的人,要多做题才能巩固知识,下面小编为大家带来了Java语言基础知识的填空题,欢迎大家阅读! Java语言基础知识填空题. 1.浮点型数据根据数据存储长度和 ...

  4. java 变成题_Java 习题8 参考答案及解析

    1.问答题 "\hello"是正确的字符串常量吗? "你好KU".length()和"\n\t\t".length()的值分别是多少? &q ...

  5. java逻辑题_Java蓝桥杯——逻辑推理练习题

    逻辑推理题 谁是贼? 公安人员审问四名窃贼嫌疑犯.已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎.在回答公安人员的问题中: 甲说:"乙没有偷,是丁偷的.&quo ...

  6. java判断题_java判断题

    判断题 1.Java语言有三种技术平台,分别是JavaSE.JavaME.JavaEE(T) 2.Java是一门高级计算机语言.(T) 3.Java语言具体跨平台的特性(T) 4.JDK工具中自带了一 ...

  7. java阅读题_java 练习题带答案

    第一题 int x = 1,y=1; if(x++==2 & ++y==2) { x =7; } System.out.println("x="+x+",y=&q ...

  8. java 判断题_Java面试题及解析(判断题)

    1.代码差错,判断代码对错,并指出错误处 abstract class Name{ private String name; public abstract Boolean isStupidName( ...

  9. java迷您_Java

    你好,我也是JAVA初学者~ 加我一下,谢谢 QQ:846491 ----------------解决方案----------------------------------------------- ...

最新文章

  1. 分布式账本(Distributed ledger)
  2. 不知道这些,简历上千万不要说你会 Redis 持久化。。。
  3. BOM—浏览器对象模型(Browser Object Model)
  4. oracle sql execute elapsed time,SQL ordered by Elapsed Time 脚本
  5. maven mysql的jdbctemplate_JDBC、JDBCTemplate、MyBatis、Hiberante 比较与分析
  6. AI技术在空气净化机器人中的高能应用
  7. 贪心法——部分背包问题
  8. ThinkPhp学习01
  9. 《MYSQL必知必会》—19~21.插入、更新、删除数据;创建、更新、删除表
  10. 如何优雅的调用第三方接口
  11. 快速搭建一个端对端加密的在线聊天室
  12. 关于简单的factorymode
  13. 什么是股票量化交易策略?
  14. 【Python】爬取2019年男篮世界杯数据,并可视化
  15. oracle 倒库详细步骤,详细的“倒车入库”步骤来了!一图一解析,照着做考试轻松一把过...
  16. 数据分析实战项目2:优衣库销售数据分析
  17. 采众家之长 凯翔软件定义存储能够后来居上吗?
  18. axure原件 总是丢失_【总结整理】AXURE原件
  19. [js]在10月31日设置月份为11月,会变成12月的问题
  20. c语言输出函数语句,c语言输出语句及格式输出函数介绍

热门文章

  1. android density原理,Android中dpi 和density究竟是什么关系?
  2. APPInventor用mySQL_利用AppInventor实现登录功能(完整版)
  3. Hyperx飓风无线游戏耳机,不止是看上去是专业游戏耳机
  4. 大模型高效开发的秘密武器——大模型低参微调套件MindSpore PET篇
  5. 显示器屏幕偏色原因及解决方案
  6. React整合FullCalendar笔记(一)
  7. excel-文本函数
  8. AUTO-CUT安装。
  9. 简易的ATM银行系统(Java)
  10. 中国硫代硫酸铵肥料行业市场供需与战略研究报告