On java 8 笔记——第四章 运算符

赋值

基本类型的赋值都是直接的。
如果是对象赋值,对一个对象进行操作时,实际上操作的是它的引用。例如:

class Tank {
    int level;
}

public class Assignment {

    public static void main(String[] args) {
        Tank t1 = new Tank();
        Tank t2 = new Tank();
        t1.level = 9;
        t2.level = 47;
        System.out.println("1: t1.level: " + t1.level +
            ", t2.level: " + t2.level);
        t1 = t2;
        System.out.println("2: t1.level: " + t1.level +
            ", t2.level: " + t2.level);
        t1.level = 27;
        System.out.println("3: t1.level: " + t1.level +
            ", t2.level: " + t2.level);
    }
}

输出结果:

1: t1.level: 9, t2.level: 47
2: t1.level: 47, t2.level: 47
3: t1.level: 27, t2.level: 27

注意最后一行全部为27,因为操作t1.level = 27将level改变了,所以t2.level也是27。因为 t1 和 t2 此时指向的是堆中同一个对象。

递增和递减

和C语言类似,前递增和前递减(如 ++a 或 --a),会先执行递增/减运算,再返回值。而对于后递增和后递减(如 a++ 或 a–),会先返回值,再执行递增/减运算。代码示例:

// operators/AutoInc.java
// 演示 ++ 和 -- 运算符
public class AutoInc {
    public static void main(String[] args) {
        int i = 1;
        System.out.println("i: " + i);
        System.out.println("++i: " + ++i); // 前递增
        System.out.println("i++: " + i++); // 后递增
        System.out.println("i: " + i);
        System.out.println("--i: " + --i); // 前递减
        System.out.println("i--: " + i--); // 后递减
        System.out.println("i: " + i);
    }
}

输出结果:

i: 1
++i: 2
i++: 2
i: 3
--i: 2
i--: 2
i: 1

判断等价

用”==“
表达式 System.out.println(n1 == n2) 将会输出比较的结果。相同:输出 true,不同:输出 false。
用equals()
例如:n1.equals(n2)

public class EqualsMethod {
    public static void main(String[] args) {
        Integer n1 = 47;
        Integer n2 = 47;
        System.out.println(n1.equals(n2));
    }
}

输出:

true

但其实事情并非那么简单。下面我们来创建自己的类:

class Value {
    int i;
}

public class EqualsMethod2 {
    public static void main(String[] args) {
        Value v1 = new Value();
        Value v2 = new Value();
        v1.i = v2.i = 100;
        System.out.println(v1.equals(v2));
    }
}

输出结果:

false

原因: equals() 的默认行为是比较对象的引用****而非具体内容。因此,除非你在新类中覆写 equals() 方法,否则我们将获取不到想要的结果。

逻辑运算中的短路

逻辑运算符支持一种称为“短路”(short-circuiting)的现象。整个表达式会在运算到可以明确结果时就停止并返回结果,这意味着该逻辑表达式的后半部分不会被执行到

字面值常量

Long 型数值:结尾使用大写 L小写 l 皆可(不推荐使用 l,因为容易与阿拉伯数值 1 混淆)。
float 浮点数:大写 F小写 f 表示。
大写 D 或小写 d 表示 double 双精度。

类型描述
Long 型数值结尾使用大写 L小写 l 皆可(不推荐使用 l,因为容易与阿拉伯数值 1 混淆)
float 浮点数大写 F小写 f 表示
double 双精度大写 D小写 d
十六进制(以 16 为基数)前导 0x 或 0X 表示,后跟 0-9 或 a-f (大写或小写)
八进制(以 8 为基数)由 0~7 之间的数字和前导零 0 表示

下划线
们可以在数字字面量中包含下划线 _,以使结果更清晰。这对于大数值的分组特别有用。
例如:0b0010_1111_1010_1111_1010_1111_1010_1111。

指数计数法

在科学与工程学领域,e 代表自然对数的基数,约等于 2.718 (Java 里用一种更精确的 double 值 Math.E 来表示自然对数)。指数表达式 “1.39 x e-43”,意味着 “1.39 × 2.718 的 -43 次方”。

// operators/Exponents.java
// "e" 表示 10 的几次幂
public class Exponents {
    public static void main(String[] args) {
        // 大写 E 和小写 e 的效果相同:
        float expFloat = 1.39e-43f;
        expFloat = 1.39E-43f;
        System.out.println(expFloat);
        double expDouble = 47e47d; // 'd' 是可选的
        double expDouble2 = 47e47; // 自动转换为 double
        System.out.println(expDouble);
    }
}

三元/条件 运算符

与c语言类似
布尔表达式 ? 值 1 : 值 2
若表达式计算为 true,则返回结果 值 1 ;如果表达式的计算为 false,则返回结果 值 2

public class TernaryIfElse {
    
static int ternary(int i) {
    return i < 10 ? i * 100 : i * 10;
}
    public static void main(String[] args) {
        System.out.println(ternary(9));
        System.out.println(ternary(10));
            }
}

输出:

900
100

字符串运算符

这个运算符在 Java 里有一项特殊用途:连接字符串
我们注意到运用 String + 时有一些有趣的现象。若表达式以一个 String 类型开头(编译器会自动将双引号 “” 标注的的字符序列转换为字符串),那么后续所有运算对象都必须是字符串。代码示例:

		int x = 0, y = 1, z = 2;
        String s = "x, y, z ";
        System.out.println(s + x + y + z);

输出:

x, y, z 012

Java没有sizeof

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值