分类 开发 下的文章

运算符

我们先来看下面的一个简单的代码。

public class Test {
    public static void main(String[] args) {
        double price = 0.1;
        double total = price * 3; // 理论上应该是 0.3
        System.out.println("总价:" + total);
    }
}

但是实际出的结果是多少呢?
运行结果:总价:0.30000000000000004
实际为什么是这些呢。就是因为*这个符号没有被正群的使用。
Java 运算符就像数学里的 + - × ÷,但功能更多,我们按用途分为 7 类,重点掌握前 5 类,后 2 类了解即可。

运算符的分类

在JAVA运算符分 7 类,算术运算符、赋值运算符、比较运算符、逻辑运算符、三元运算符、位运算符、类型相关。

群组

String类为什么是不可变的

Java 中 String 类的「不可变」,指的是:一个 String 对象一旦被创建成功,它的「字符内容」和「内存地址」就永远无法被修改。
我们平时写的 String str = "abc"; str = "def"; 并不是修改了原对象,而是创建了一个新的 String 对象,把变量的引用指向了新对象,原对象 "abc" 纹丝不动

核心原因:从源码层面彻底讲透(3 个底层设计,面试答全这 3 点 = 满分)

  1. 原因 1:String 类被 final 关键字修饰

四 为什么要把String类设计成不可变的(这样设计的好处)。

4.1 大幅度节省内存
4.2 保证【哈希值唯一不变】,提升 HashMap 等集合的效率
4.3 天生【线程安全】,多线程环境下无并发问题
4.4 保证【数据安全性】,防止核心数据被恶意篡改

其他的不可变类

String、Integer/Byte/Short/Long/Boolean/Character/Float/Double、BigInteger、BigDecimal、Enum 枚举类。