深入Java不可变类型的详解

横观天下风云

横观天下风云

2016-02-19 09:29

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的深入Java不可变类型的详解教程,一起来看看吧!超容易上手~
我们先看下面一个例子:
代码如下:

    import java.math.BigInteger; 
    public class BigProblem { 
        public static void main(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); 
        } 
    } 

你可能会认为这个程序会打印出555000。毕竟,它将total设置为用BigInteger表示的0,然后将5,000、50,000和500,000加到了这个变量上。如果你运行该程序,你就会发现它打印的不是555000,而是0。很明显,所有这些加法对total没有产生任何影响。

对此有一个很好理由可以解释:BigInteger实例是不可变的。String、BigDecimal以及包装器类型:Integer、Long、Short、Byte、Character、Boolean、Float和Double也是如此,你不能修改它们的值。我们不能修改现有实例的值,对这些类型的操作将返回新的实例。起先,不可变类型看起来可能很不自然,但是它们具有很多胜过与其向对应的可变类型的优势。不可变类型更容易设计、实现和使用;它们出错的可能性更小,并且更加安全[EJ Item 13]。

为了在一个包含对不可变对象引用的变量上执行计算,我们需要将计算的结果赋值给该变量。这样做就会产生下面的程序,它将打印出我们所期望的555000:
代码如下:

    import java.math.BigInteger; 
    public class BigProblem { 
        public static void main(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); 
        } 
    } 

展开更多 50%)
分享

猜你喜欢

深入Java不可变类型的详解

编程语言 网络编程
深入Java不可变类型的详解

JAVA进阶 JAVA中具有实例缓存的不可变类

编程语言 网络编程
JAVA进阶 JAVA中具有实例缓存的不可变类

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

深入java垃圾回收的详解

编程语言 网络编程
深入java垃圾回收的详解

深入JAVA对象深度克隆的详解

编程语言 网络编程
深入JAVA对象深度克隆的详解

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

深入java线程池的使用详解

编程语言 网络编程
深入java线程池的使用详解

深入分析java文件路径的详解

编程语言 网络编程
深入分析java文件路径的详解

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Android中设置只有程序第一次运行才显示的界面实现思路

Android中设置只有程序第一次运行才显示的界面实现思路

文档处理系列——随时更新

文档处理系列——随时更新
下拉加载更多内容 ↓