《 Java 编程思想》CH03 操作符

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

操作符

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

赋值

在为对象“赋值”时,其实质是拷贝“引用”,需要注意“别名现象”

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

方法调用中的别名问题

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函数来比较。

Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
n1 == n2; // false
n1.equals(n2); // true

equals默认是比较引用,所以在自己实现的类中需要覆盖equals方法才能进行语义上的比较

逻辑操作符

&&,||!操作只能用于布尔值,与C++不同,对一个非布尔值进行逻辑运算不会对该值强制转换,会报编译错误

Java中的逻辑操作符也有“短路”现象

直接常量

  • 十六进制0x/0X前缀+0-9a-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 会将一种数据类型自动转换为另一种。

显式的类型转换如下:

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

《 Java 编程思想》CH03 操作符的更多相关文章

  1. JAVA编程思想(2) - 操作符(一)

    "在最底层,Java中的数据是通过操作符来操作的." 1. 使用Java操作符 -操作符接受一个或者多个參数,并生成一个新值,參数的形式与普通的方法调用不用,但效果是同样的.加号和 ...

  2. JAVA编程思想(2) - 操作符(二)

    5. 直接常量 -一般来说,假设程序里使用了"直接常量",编译器能够准确的知道要生成什么样的类型.但有时候却是模棱两可的. 这时候须要我们对编译器进行适当的"指导&quo ...

  3. Java编程思想之三 操作符

    在底层,Java中的数据是通过使用操作符来操作的. 3.2 使用Java操作符 操作符接收一个或多个参数,并生成一个新值. 操作符作用于操作数,生成一个新值.有些操作符可能会改变操作数自身的值,这被称 ...

  4. 《java编程思想》操作符

    1. 自动递增和递减 递增和递减运算是两种相当不错的快捷运算,递减操作符是 "--",意为减少一个单位,递增操作符是 "++",意为增加一个单位.这两个操作符各 ...

  5. [Java编程思想-学习笔记]第3章 操作符

    3.1  更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...

  6. Java编程思想重点笔记(Java开发必看)

    Java编程思想重点笔记(Java开发必看)   Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...

  7. java编程思想

    Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理 ...

  8. Java编程思想(11~17)

    [注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第十一章 持有对象 11.1 泛型和类型安全的容器>eg: List<St ...

  9. Java编程思想 (1~10)

    [注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第一章 对象导论 1.万物皆对象2.程序就是对象的集合3.每个对象都是由其它对象所构成 ...

随机推荐

  1. 浅谈Linux下/etc/passwd文件

    浅谈Linux 下/etc/passwd文件 看过了很多渗透测试的文章,发现在很多文章中都会有/etc/passwd这个文件,那么,这个文件中到底有些什么内容呢?下面我们来详细的介绍一下. 在Linu ...

  2. 洛谷P1082 同余方程 题解

    题目链接:https://www.luogu.com.cn/problem/P1082 题目大意: 求关于 \(x\) 的同余方程 ax≡1(mod b) 的最小正整数解. 告诉你 \(a,b\) 求 ...

  3. 阿里云函数计算 .NET Core 初体验

    体验了一波阿里云函数计算, 已支持 .NET Core 2.1, 那么按照惯例, 来写个 "Hello World" 吧. 作者注: 开发环境 Windows 10 & V ...

  4. Bandicam(班迪录屏)高清视频录制工具

    Bandicam(班迪录屏)简单好用的录屏幕,录游戏,录视频的功能强大的屏幕录像软件,比起其他软件其性能更加卓越. 与其他软件相比,用Bandicam录制的视频大小更小, 不仅保证原文件的质量.

  5. VS 超级好用的 Ctrl E E

    C# Interactive 推荐!!! 先看我怎么用的:随便创建一个类 有些编译期的的值不知道查文档又太麻烦怎么办?自己写个控制台测试咩?试试 C# 交互 罢, 选中这个类ctrl EE 然后输入 ...

  6. 微信小程序--百度地图坐标转换成腾讯地图坐标

    最近开发小程序时出现一个问题,后台程序坐标采用的时百度地图的坐标,因为小程序地图时采用的腾讯地图的坐标系,两种坐标有一定的误差,导致位置信息显示不正确.现在需要一个可以转换两种坐标的方法,经过查询发现 ...

  7. Python Django配置Mysql数据库

    1 在项目中找到setting文件 打开 2 在里面找到 3 将Databases里面的数据改成 DATABASES = { 'default': { #引擎设置为Mysql 'ENGINE': 'd ...

  8. 一个DNS数据包的惊险之旅

    踏上旅程 “小子,快去查一下www.paypal.com的IP地址,我急用,晚了我弄你!”,暴躁老哥一把关上了门,留我一个DNS数据包在冷冰冰的房间. 过了一会儿,一位大叔打开了门,带着我来到了一座叫 ...

  9. VirtualBox扩充磁盘&清空安装包

    1.virtual box 扩充磁盘空间 D:\VirtualBox\VBoxManage.exe modifyhd "E:\virtual box\daisyyun\daisyyun.vd ...

  10. docker安装的gitlab的备份与恢复

    1.对docker容器安装gitlab备份 1) 查看容器id docker ps 2) 将容器备份成镜像文件 docker commit -a 'James' -m 'gitlab_backup' ...