初读"Thinking in Java"读书笔记之第三章 --- 操作符
- 更简单的打印语句
- 导入自己编写的静态类库,即可使用
print();打印
- 导入自己编写的静态类库,即可使用
- 使用Java操作符
- 操作符:
+,-,*,/,=,==,!=,+=,?:,%等 - 几乎所有操作符都只能操作“基本类型”,但是
=,==,!=例外 - String类支持
+和+=。+的作用是将字符串拼接,同时若需要进行类型转换时,会将非String类转换成String类。
- 操作符:
- 优先级
- 先乘除后加减
- 其余处应使用括号明确指出优先级。
- 赋值
=为赋值操作符。- 左值必须是一个明确的,已命名的变量,用来保证有一个物理空间能保存右值。
- 右值可以是任何常数,变量或者表达式。
- 常数不能作为左值。
- 基本数据类型的赋值,仅仅是复制存储的内容。
- 引用类型的赋值,则是将对象的地址复制给了新的变量,新旧变量将操控相同的对象。该现象称为"别名现象"。
- 形式参数为引用类型的方法在调用时同样会出现别名现象,该方法将会修改方法之外的对象。
- 算术操作符
- 一元
-用于转变数据的符号,一元+用于将较小类型操作数提升为int。
- 一元
- 自动递增和递减
++a,--a前缀式,先执行递增或递减运算,然后生成值。a++,a--后缀式,先生成值,在进行递增或递减运算。- 递增和递减操作符是唯一具有"副作用"的操作符。他们不仅使用变量的值,还会改变变量的值。
- 关系操作符
>,>=,<,<=,==,!=,返回布尔型的值。- 非基本数据类型,直接采用
==时,比较的是两个对象的引用是否相同。 - 若要比较两个对象的实际内容是否相同,需要采用
引用.equals()方法。而且自定义的类,需要重写equals()方法。
- 逻辑操作符
&&,||,!,操作数为布尔型的值,返回值也为布尔型。- 与C不同,Java中不可将非布尔类型的值用在逻辑表达式中。
- 短路现象
- 当使用逻辑操作符时,一旦能够确定表达式的值,剩余部分便不再继续计算。
- 逻辑表达式靠后的运算有可能不被执行。
- 这种机制可以提升性能。
- 直接常量
- 直接常量在编译时有时不能确定类型,需要用某些字符指明
0x***,0X***代表16进制。0***代表八进制。***L,***l代表long。***F,***f代表float。- 当表示的值超出了类型范围时,编译器会报告错误。
- 使用
包装类. toBinaryString()方法,可以将数据转换成二进制。 - 如果编译器能够正确识别类型,就不必在数值后附加字符。
- 按位操作符
&,|,~,^,^=,&=,|=,按位对两个操作数进行操作。- 按位操作符具有与逻辑操作符相同的效果,但是不会中途短路。
- 布尔型数据可以作为单比特值对待,但是对布尔型数据不能执行按位非操作。
- 移位操作符
<<,>>,>>>,<<=,>>=,>>>=只能用来处理整形数据类型- 左移位操作符可以将操作数向左移动,低位补0。
- 右移位操作符可以将操作数向右移动; 若符号为正,则高位补0; 若符号为负,则高位补1。
>>>为"无符号"右移位操作符,无论正负,都在高位补0。- 如果对
char, byte,short类型的数进行移位处理,在移位之前会转成int类型,并且结果也是int类型的数。 <<=,>>-,>>>=可以将左边的值移动由右边的值指定的位数,再将结果赋给左边的变量。- 对byte或short值进行上述移位运算时,最后赋值时会导致截断,得到错误的结果。
- 三元操作符
布尔表达式 ? 表达式0:表达式1。判断布尔表达式的值,若为true,则运算表达式0,并返回其值;若为false,则计算表达式1,并返回其值。
- 字符串操作符+和+=
- 如果表达式以一个字符串起头,那么后续所有的操作数都必须是字符串类型。
- 使用操作符时常犯的错误
while(x=y)是C里面常见的错误,但Java中会检查括号内运算结构是否是布尔值;同时Java不会自动将int转换成布尔值,因此除非x和y都是布尔值,否则该错误会被编译器报告。
- 类型转换操作符
- 可以对数值或者变量进行强制类型转换。
窄化转换:将数据类型由大向小转换,可能面临信息丢失的危险,必须显式地进行转换。扩展转换:将数据类型由小向大转换,不会丢失任何信息,不必显示地进行转换。- 布尔型数据不允许进行任何类型的转换。
- 除布尔型外,其他任何基本数据类型之间都可相互转换。
- 类数据类型不允许进行类型转换。
- 窄化转换中,不会进行四舍五入操作,若要四舍五入,需要采用
Math类中的round()方法。 - 在执行算术运算或按位运算时,只要比int小的数,都会自动转成int类型,并且结果也是int类型。
- 通常,表达式中出现的最大数据类型决定了表达式最终结果的数据类型。
- Java没有sizeof
- Java语言的数据类型占的空间在所有机器中都是相同的,因此不需要通过sizeof来获得数据字节数,方便移植。
- 操作符小结
- 布尔型数据只能进行
true,false的赋值及测试运算,不能进行加减等其他任何运算。 char,byte,short在算术运算时会被数据提升为int,必须将其显示地强制转换回原来的数据类型。char,byte,short在进行复合赋值运算(+=)时,不需要显示地类型转换
- 布尔型数据只能进行
初读"Thinking in Java"读书笔记之第三章 --- 操作符的更多相关文章
- 初读"Thinking in Java"读书笔记之第五章 --- 初始化与清理
用构造器确保初始化 构造器可以确保每个对象都会得到初始化,Java毁在创建对象时自动调用构造器. 构造器采用与类名相同的名称,因此并不适合"每个方法首字母小写的风格". 构造器默认 ...
- 初读"Thinking in Java"读书笔记之第七章 --- 复用类
组合语法 将对象引用置于新类中,即形成类的组合. 引用初始化方法 在定义处初始化. 在类的构造器中初始化. 在使用这些对象之前,进行"惰性初始化". 使用实例初始化. 继承语法 J ...
- 初读"Thinking in Java"读书笔记之第六章 --- 访问权限控制
包:库单元 包内包含有一组类,他们在单一的名字空间下被组织在一起. 通过import ***.***.*可以将某个包下的所有类导入到当前文件中. 每个Java源文件最多只能有一个public类,且名称 ...
- 初读"Thinking in Java"读书笔记之第四章 ---控制执行流程
true和false Java不允许将数字作为布尔值使用. 所有条件表达式都将布尔值作为判断条件,决定执行路径. if-lese 迭代 while,do-while,for为三个迭代语句. ,逗号操作 ...
- 初读"Thinking in Java"读书笔记之第二章 --- 一切都是对象
用引用操纵对象 Java里一切都被视为对象,通过操纵对象的一个"引用"来操纵对象. 例如, 可以将遥控器视为引用,电视机视为对象. 创建一个引用,不一定需要有一个对象与之关联,但此 ...
- 初读"Thinking in Java"读书笔记之第九章 --- 接口
抽象类和抽象方法 abstract void f();抽象方法是仅有声明而没有方法体的方法. 包含抽象方法的类叫做抽象类,如果一个类包含了一个抽象方法,则该类必须限定为抽象类. 抽象类和抽象方法可以使 ...
- 初读"Thinking in Java"读书笔记之第八章 --- 多态
再论向上转型 在某些方法中,仅接收基类作为参数,而不是特殊的导出类,会使得程序更容易扩展. 转机 方法调用绑定 前期绑定(编译期绑定):在编译期将一个方法调用和方法主体关联起来. 后期绑定(动态绑定或 ...
- 《深入理解Java虚拟机》读书笔记(第三章)
垃圾收集器与内存分配策略(第三章) 前言,众所周知,Java是由c++进化而来,c++在内存需自己申请,自己释放,于是就有了Java的动态内存分配.书的第三章开篇,有这样一句话描述的很妙——Java与 ...
- 《深入理解java虚拟机》读书笔记二——第三章
第三章 垃圾收集器与内存分配策略 1.判断对象是否已死 引用计数法: 给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,每当引用失效时,计数器值就减1. 任何时刻计数器为0的对象就是不 ...
随机推荐
- python中import与from方法总结
一.模块&包简介 模块:所谓模块就是一个.py文件,用来存放变量,方法的文件,便于在其他python文件中导入(通过import或from). 包(package): 包是更大的组织单位,用来 ...
- ArrayList源码阅读笔记(1.8)
目录 ArrayList类的注解阅读 ArrayList类的定义 属性的定义 ArrayList构造器 核心方法 普通方法 迭代器(iterator&ListIterator)实现 最后声明 ...
- ubuntu使用抓包工具,charles
参考官网:https://www.charlesproxy.com/documentation/installation/apt-repository/ wget -q -O - https://ww ...
- ExtJs写本地ArrayStore,ComboBox调用
1.自定义本地ArrayStore var sCurStore = new Ext.data.ArrayStore({ //设备状态store fields: ["ckey", & ...
- jupyter notebook——安装配置
本地登陆 cmd输入下面的命令,会进入用户主目录 jupyter notebook 在浏览器打开时,提示输入token,复制命令行上的token还是不能进入,其实浏览器上有提示的,按照提示操作即可,输 ...
- Caused by : java.io.IOException: Cleartext HTTP traffic to 《“url”》 not permitted
一.问题原因: 根本原因是从Android9.0开始,出于完全因素考虑,默认不再支持http网络请求,需要使用 https. 二.解决方案: 解决的基本思路是:对指定的网址进行过滤,强制允许指定网址继 ...
- ubuntu下安装 java环境
步骤1:下载jdk 我选择的jdk版本文件: jdk-8u201-linux-x64.tar 官网下载链接 步骤2:创建单独的目录 sudo mkdir /usr/local/java 步骤3:将下载 ...
- [English] Time complexity wise this solution is the best among all
Time complexity wise this solution is the best among all, we can do all operations in O(1) time. 时间复 ...
- Hadoop OutputCommitter
1. OutputCommitters MapReduce使用一个提交协议来确保作业(job)和任务(task)都完全成功或失败.这个通过 OutputCommiter来实现. 新版本 MapRedu ...
- Python的类的下划线命名的区别
首先,单下划线开头,这个常被用于模块中,在一个模块中以单下划线开头的变量和函数被默认当做内部函数,如果使用from module import *导入时,这部分变量和函数不会被导入.注意,如果使 ...