java解惑之大问题

import java.util.*;
import java.math.BigInteger;
public class FiftySixth{
        public static void main(String[] args){
                BigInteger one = new BigInteger("500");
                BigInteger two = new BigInteger("5000");
                BigInteger three = new BigInteger("50000");
                BigInteger total = BigInteger.ZERO;
                total.add(one);
                total.add(two);
                total.add(three);
                System.out.println(total);
        }
}

输出多少?

0

怎么会呢?不是加了吗?

注意了BigInteger是不可变类型

不可变类型:

String,Integer,BigDecimal,Long,Charactor,Short,Byte,Boolean,Float,Double

再看看BigInteger的方法:

BigIntegeradd(BigInteger val)Returns
a BigInteger whose value is (this + val)

BigIntegerdivide(BigInteger val)Returns a BigInteger whose value is
(this / val).

intintValue()Converts this BigInteger to an
int.

BigIntegernegate()Returns
a BigInteger whose value is (-this)

BigIntegersubtract(BigInteger val)Returns
a BigInteger whose value is (this - val).

可以观察到,加减乘除的返回值都是BigInteger,这也说明最终的运算是返回结果,但是不改变原值。

也可以这样理解

int i=0;

i+1+2+3+4+5+6;

那么i的值是多少?当然是0啦!!!

时间: 2024-08-03 22:43:02

java解惑之大问题的相关文章

《Java解惑》读书笔记

 摘选自<Java解惑>一书,之前整理了部分,一直没看完,最近为了督促自己每天读点这本书,决定一天至少更新一个谜题的内容,欢迎讨论. 欢迎关注技术博客http://blog.sina.com.cn/u/1822488043 Java解惑读书笔记 谜题1:奇数性 取余操作的定义: ( a / b ) * b + ( a % b ) = a 其中(a/b)是java运算的结果,也就是a/b是一个整数,比如3/2=1. 所以当取余操作返回一个非零结果的时候,它与左操作数具有相同符号. 请测试你的

【java解惑】前缀自增自减和后缀自增自减问题

    如下代码: public class Example025 { public static void main(String[] args) { int ape = 100; int it = 100; int ape_it = 100; for (int i = 0; i < 100; i++) { ape--; it = it--; ape_it = --ape_it; } System.out.println("ape = " + ape); System.out.

《Java 解惑》笔记(一)

<Java 解惑>里都是一些编程时容易忽略的细节,却也蛮有意思的,所以将里面的内容稍作整理,简略地概括一下: 1.奇数性 在编程的时候经常会遇到要判断传进来的参数是否为奇数,而且容易惯性地认为判断余数是否为1即可,如下代码: public static boolean isOdd ( int i ) { return i % 2 == 1 } 这段程序在四分之一的时间里返回的都是错误的答案 因为在所有的 int 数值中,有一半都是负数,而 isOdd 方法对于对所有负奇数的判断都会失败.在任何

java解惑之常常忘记的事

java解惑之常常忘记的事 2012-10-17 18:38:57|  分类: JAVA |  标签:基础知识  软件开发  |举报|字号 订阅 针对刚接触java的菜鸟来说,java基础知识都是我们必须认真学习的,但是在工作过几年时间的老鸟来说,有时候也会对java的基础知识产生疑问,对于这种不确定,并且很容易混淆的知识点,java解惑已经为大家进行了很好的总结,现在借用一个作者的总结,进行一下罗列,希望能对你有所帮助. 1. 奇偶判断 不要使用 i % 2 == 1 来判断是否是奇数,因为i

Java解惑七:更多类之谜

谜题66 继承的问题. 对于实例方法:命名相同时,子类会覆写父类的方法,且访问权限至少和父类一样大. 对于域:命名相同时,子类会隐藏父类的域,且访问权限任意. 谜题67 不要重用库中的类名. 谜题68 命名的问题. 类名应该以大写字母开头,形式为:MixedCase. 变量以小写字母开头,形式为:mixedCase. 常量以大写字母开头,形式为:MIXED_CASE. 单个大写字母,只能用于类型参数,形式为:Map<K, V>. 包名应该都是小写,形式为:lower.case. 当一个变量和一

【java解惑】重载构造函数

如下所示代码: public class Example046 { private Example046(Object o) { System.out.println("Object"); } private Example046(double[] dArray) {//2 System.out.println("double array"); } private Example046(String str) {//3 System.out.println(&quo

【java解惑】移位运算符规则

    如下代码: public class Example027 { public static void main(String[] args) { int i = 0; while (-1 << 32 != 0) { i++; } System.out.println(i); } }     结果说明:     将上述程序放到eclipse中,在输出行会有提示"Unreachable code".也就是while循环是死循环无法退出.     结果分析:     Ja

java解惑

谜题45:令人疲惫不堪的测验 收获: (1)递归调用的先序便利二叉树,以后在理解递归时可以做出书上所示的递归二叉树.这个图的好处是,指出了递归的深度+递归叶子层+调用的顺序(通过在每条线加上调用序号). (2)JVM的栈深度默认是1024:这也就导致本题的线序遍历二叉树边数过多,永远不会抛出stackoverflow的exception. (3)如何设置JVM,一开始我都不知道,原来是用java命令. 相应参考资料: http://hi.baidu.com/sdausea/item/f4671b

Java解惑五:类之谜

本文是依据JAVA解惑这本书,做的笔记.电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题46 函数重载的问题. JAVA重载解析过程:1. 选取全部可用的方法或者构造器:2. 从过程1中选取的方法或构造器中选择最精确的. 一般而言:能够强制要求编译器选择一个精确的重载版本号,将实參转型为形參所声明的类型. 谜题47 继承中静态域的问题. 静态域由声明它的类及其全部子类共享. 假设须要让每个子类都具有某个域的单独拷贝,必须在每个子