《 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. 安装Docker Machine

    什么是Docker Machine Docker Machine是Docker官方编排项目之一,由Go语言实现,负责在多种平台上快速安装Docker环境,Github项目主页 它支持Linux.Mac ...

  2. Python数据分析:手把手教你用Pandas生成可视化图表

    大家都知道,Matplotlib 是众多 Python 可视化包的鼻祖,也是Python最常用的标准可视化库,其功能非常强大,同时也非常复杂,想要搞明白并非易事.但自从Python进入3.0时代以后, ...

  3. 负载均衡基本原理与lvs

    前言: 之前在山西的项目上使用的是lvs下的NAT模式,但另外两个模式并没有涉及,今天系统的整理下关于负载均衡的相关理论与lvs各模式的相关优点与不足,知其然与所以然,而后能针对性的应用: 基本介绍 ...

  4. spring boot 中AOP的使用

    一.AOP统一处理请求日志 也谈AOP 1.AOP是一种编程范式 2.与语言无关,是一种程序设计思想 面向切面(AOP)Aspect Oriented Programming 面向对象(OOP)Obj ...

  5. 关于ESP8266 NodeCMU固件无法刷入新代码的解决方法

    在玩ESP8266时,有时候会无意中写了导致死循环的代码,或都某些函数传递了不合适的参数导致系统崩溃,这可能会导致ES8266不停地重启,这时我们发现无法刷入新的代码,也无法删除8266中的原代码.我 ...

  6. 【Java基础总结】多线程

    1. 实现多线程的两种方式 //第一种:继承Thread类,重写run()方法 class ThreadTest1 extends Thread{ public void run(){ String ...

  7. 【重要】Pro Git 第二版 简体中文

    不管是入门还是精通git,下面这本书都是必读,同时它也是官方推荐书籍.   Pro Git 第二版 简体中文     我自己还收集了一份网页版的progit,但可能不是progit第二版. 下载地址  ...

  8. 关于yarn安装,这里做一个备份

    安装的是window版本,官网上有三种安装方式. 第一种下载一个.msi的安装包,然后当它运行时会指引你将 Yarn 安装到 Windows 上,因为点开以后页面是404,所以没有用这种方法. 第二种 ...

  9. Your Ride Is Here 你的飞碟在这儿 USACO 模拟

    1001: 1.1.1 Your Ride Is Here 你的飞碟在这儿 时间限制: 1 Sec  内存限制: 128 MB提交: 9  解决: 9[提交] [状态] [讨论版] [命题人:外部导入 ...

  10. mysql高级复习

    MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.可以得到索引的本质:索引是数据结构,可以简单理解为“排好序的快速查找数据结构”. 数据本身之外,数据库还维护着一 ...