《 Java 编程思想》CH03 操作符
《 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-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 会将一种数据类型自动转换为另一种。
显式的类型转换如下:
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 操作符的更多相关文章
- JAVA编程思想(2) - 操作符(一)
"在最底层,Java中的数据是通过操作符来操作的." 1. 使用Java操作符 -操作符接受一个或者多个參数,并生成一个新值,參数的形式与普通的方法调用不用,但效果是同样的.加号和 ...
- JAVA编程思想(2) - 操作符(二)
5. 直接常量 -一般来说,假设程序里使用了"直接常量",编译器能够准确的知道要生成什么样的类型.但有时候却是模棱两可的. 这时候须要我们对编译器进行适当的"指导&quo ...
- Java编程思想之三 操作符
在底层,Java中的数据是通过使用操作符来操作的. 3.2 使用Java操作符 操作符接收一个或多个参数,并生成一个新值. 操作符作用于操作数,生成一个新值.有些操作符可能会改变操作数自身的值,这被称 ...
- 《java编程思想》操作符
1. 自动递增和递减 递增和递减运算是两种相当不错的快捷运算,递减操作符是 "--",意为减少一个单位,递增操作符是 "++",意为增加一个单位.这两个操作符各 ...
- [Java编程思想-学习笔记]第3章 操作符
3.1 更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...
- Java编程思想重点笔记(Java开发必看)
Java编程思想重点笔记(Java开发必看) Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...
- java编程思想
Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理 ...
- Java编程思想(11~17)
[注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第十一章 持有对象 11.1 泛型和类型安全的容器>eg: List<St ...
- Java编程思想 (1~10)
[注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第一章 对象导论 1.万物皆对象2.程序就是对象的集合3.每个对象都是由其它对象所构成 ...
随机推荐
- $loj$10222 佳佳的$Fibonacci$ 矩阵快速幂
正解:矩阵快速幂 解题报告: 我永远喜欢loj! 一看到这个就应该能想到矩阵快速幂? 然后就考虑转移式,发现好像直接想不好想,,,主要的问题在于这个*$i$,就很不好搞$QAQ$ 其实不难想到,$\s ...
- 「Luogu P2278」[HNOI2003]操作系统 解题报告
题面 一道模拟题,模拟CPU的处理过程?!省选模拟题 思路: 模拟退火大法+优先队列乱搞 要注意的点 1.空闲时,CPU要处理进程 2.当队列中没有进程时,要先进行判断,然后访问 3.当优先级高的进程 ...
- 02_jQuery 验证密码是6位或者8位纯数字
var reg = new RegExp(/^\d{8}$/); //工作密码必须是8位数字 if(!reg.test("12544444").val())) { alert(&q ...
- Spring中常见的设计模式——策略模式
策略模式(Strategy Pattern) 一.策略模式的应用场景 策略模式的应用场景如下: 系统中有很多类,而他们的区别仅仅在于行为不同. 一个系统需要动态的在集中算法中选择一种 二.用策略模式实 ...
- 删除资源管理器中,设备和驱动器与左侧边栏中存在的WPS网盘等图标
存在的问题:资源管理器中,设备和驱动器与左侧边栏中存在的百度网盘和WPS网盘等图标,看着比较碍眼,所以想设置为不显示,可是软件本身不提供右键不显示或删除的功能 解决方案: 删除设备和驱动器中不想要的图 ...
- netcore 自动生成Dockerfile的坑
简介 之前采用shell脚本+dockerfile的方式构建项目,后来发现有Docker在17.05版本之后有多阶段构建方式,该文主要记录了netcore采用dockerfile构建遇到的坑. 原 ...
- 关于Itext 报错-java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1Encodable
如果我们在用iText 做为java 为PDF 文档加水印的时候 报如下异常 java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1Enc ...
- Java之IO流用法总结
Java的IO流概述:1.I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理设备之间的数据传输.如读/写文件,网络通讯等.2.Java程序中,对于数据的输入/输出操作以“流( ...
- Bonny手机APP试用体验
在上周四(即6月13日)下午,应王建民老师的邀请,我参观了学长学姐们的软件设计评比以及专业交流的活动,看到了形形色色学长学姐设计出的软件我觉得非常有趣,并对学长学姐们设计的软件的种类与功能感到由衷的钦 ...
- Java 集合的工具类Collections的常用方法
Collections类 java.utils.Collections是集合工具类,用来对集合进行操作. Collections类的常用方法 这里介绍四个常用方法: addAll(Collection ...