查看: 197|回复: 0

《 Java 编程思想》CH03 操作符

[复制链接]
发表于 2020-2-19 17:37:02 | 显示全部楼层 |阅读模式
《 Java 编程头脑》CH03 操作符

在最底层,Java中的数据是通过操作符来操作的。
操作符


  • +,-,*,*,=与其他语言类似
  • 几乎全部的操作符只能操作“基本类似”,而=,==,!=是例外
  • String 类支持+和+=操作符,表示拼接操作,在举行拼接的操作会尝试将非 String 的元素转换为 String(调用tostring())
  • 赋值操作符=的左边(左值)必须是一个明确的已定名的变量。
赋值

在为对象“赋值”时,实在质是拷贝“引用”,必要留意“别名现象”
  1. package com.company.ch03;class Tank {    int level;}public class Assignment {    public static void main(String[] args) {        Tank tank1 = new Tank();        Tank tank2 = new Tank();        tank1.level = 12;        tank2.level = 13;        System.out.println("tank1 = " + tank1.level);        System.out.println("tank2 = " + tank2.level);        tank1 = tank2;        tank1.level++;        System.out.println("tank1 = " + tank1.level);        System.out.println("tank2 = " + tank2.level);    }}//tank1 = 12//tank2 = 13//tank1 = 14//tank2 = 14
复制代码
方法调用中的别名问题
  1. package com.company.ch03;class Letter {    char c;}public class PassObject {    static void f(Letter y) {        y.c = 'z';    }    public static void main(String[] args) {        Letter x = new Letter();        x.c = 'a';        System.out.println("x.c = " + x.c); // a        f(x);        System.out.println("x.c = " + x.c); // z    }}
复制代码
不管是那种别名问题,关键是要明确到拷贝的是引用,不是对象。
算数操作符 & 自增与自减 & 按位操作符


  • 整数除法不会四舍五入,而是直接舍去小数位
  • 其余与C++中的一样
关系操作符

关系操作符与 C++ 也是类似,有一点比较特别的是在 Java 中==和!=可以用在对象上,其比较的是引用,而不是对象内的值,假如要比较两个对象是否相称(语义上),通常调用equals函数来比较。
  1. Integer n1 = new Integer(47);Integer n2 = new Integer(47);n1 == n2; // falsen1.equals(n2); // true
复制代码
equals默认是比较引用,所以在自己实现的类中必要覆盖equals方法才能举行语义上的比较
逻辑操作符

&&,||和!操作只能用于布尔值,与C++差别,对一个非布尔值举行逻辑运算不会对该值强制转换,会报编译错误
Java中的逻辑操作符也有“短路”现象
直接常量


  • 十六进制0x/0X前缀+0-9和a-f
  • 八进制0前缀+0-8
  • 后缀l/L表示long类型
  • 后缀f/F表示float类型
  • 后缀d/D表示double类型
  • 指数记数法:1.39E-43表示\(1.39 \times e^{-43}\)
移位操作符


  • 移位操作符只能用于处理整数类型
  • >>符号扩展,>>>0扩展
  • 对 char、byte、short 类型举行移位运算,在举行移位之前会先转回为 int
三元运算符

boolean-exp ? value0 : value1
字符串操作符 + 和+=


  • 字符串中操作符 + 和+=表示“拼接”操作
  • 假如一个表达式以字符串开头,那么其后续操作数都必须是字符串类型(不是则举行强制转换)
类型转换操作符

类型转换(cast)是指,在适当的时候,Java 会将一种数据类型自动转换为另一种。
显式的类型转换如下:
  1. int i = 200;long l = (long)i;int j = (int)l;
复制代码
类型转换:


  • 窄式转换,必要显式指定(如 long 转 int)
  • 扩展转换,无需显式指定(如 int 转 long)
  • Java允许任何基本类型之间的类型转换,除了布尔值。
  • “类”数据类型不允许类型转换
截尾和舍入


  • 当 float 或 double 转向整型时,总是对数字举行截尾
  • 假如必要舍入,可以调用java.lang.Math.round()
提升

一个表达式中出现的最大的数据类型决定了该表达式最终结果的数据类型,如 int 类型与 long 类型相加,得到一个 long 类型。
Java 没有 sizeof

由于Java中全部基本数据类型的巨细都是明确的,所以不必要sizeof。BTW,boolean 不是没有明确嘛。
首发与Code & Fun

相关技术服务需求,请联系管理员和客服QQ:2753533861或QQ:619920289
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

帖子推荐:
客服咨询

QQ:2753533861

服务时间 9:00-22:00

快速回复 返回顶部 返回列表