1. 更简单的打印语句

    • 导入自己编写的静态类库,即可使用print();打印
  2. 使用Java操作符
    • 操作符:+,-,*,/,=,==,!=,+=,?:,%等
    • 几乎所有操作符都只能操作“基本类型”,但是=,==,!=例外
    • String类支持+和+=+的作用是将字符串拼接,同时若需要进行类型转换时,会将非String类转换成String类。
  3. 优先级
    • 先乘除后加减
    • 其余处应使用括号明确指出优先级。
  4. 赋值
    • =为赋值操作符。
    • 左值必须是一个明确的,已命名的变量,用来保证有一个物理空间能保存右值。
    • 右值可以是任何常数,变量或者表达式。
    • 常数不能作为左值。
    • 基本数据类型的赋值,仅仅是复制存储的内容。
    • 引用类型的赋值,则是将对象的地址复制给了新的变量,新旧变量将操控相同的对象。该现象称为"别名现象"
    • 形式参数为引用类型的方法在调用时同样会出现别名现象,该方法将会修改方法之外的对象。
  5. 算术操作符
    • 一元-用于转变数据的符号,一元+用于将较小类型操作数提升为int
  6. 自动递增和递减
    • ++a,--a前缀式,先执行递增或递减运算,然后生成值。
    • a++,a--后缀式,先生成值,在进行递增或递减运算。
    • 递增和递减操作符是唯一具有"副作用"的操作符。他们不仅使用变量的值,还会改变变量的值。
  7. 关系操作符
    • >,>=,<,<=,==,!=,返回布尔型的值。
    • 非基本数据类型,直接采用==时,比较的是两个对象的引用是否相同。
    • 若要比较两个对象的实际内容是否相同,需要采用引用.equals()方法。而且自定义的类,需要重写equals()方法。
  8. 逻辑操作符
    • &&,||,!,操作数为布尔型的值,返回值也为布尔型。
    • 与C不同,Java中不可将非布尔类型的值用在逻辑表达式中。
    • 短路现象
      • 当使用逻辑操作符时,一旦能够确定表达式的值,剩余部分便不再继续计算。
      • 逻辑表达式靠后的运算有可能不被执行。
      • 这种机制可以提升性能。
  9. 直接常量
    • 直接常量在编译时有时不能确定类型,需要用某些字符指明
    • 0x***,0X***代表16进制。
    • 0***代表八进制。
    • ***L,***l代表long。
    • ***F,***f代表float。
    • 当表示的值超出了类型范围时,编译器会报告错误。
    • 使用包装类. toBinaryString()方法,可以将数据转换成二进制。
    • 如果编译器能够正确识别类型,就不必在数值后附加字符。
  10. 按位操作符
    • &,|,~,^,^=,&=,|=,按位对两个操作数进行操作。
    • 按位操作符具有与逻辑操作符相同的效果,但是不会中途短路。
    • 布尔型数据可以作为单比特值对待,但是对布尔型数据不能执行按位非操作。
  11. 移位操作符
    • <<,>>,>>>,<<=,>>=,>>>=只能用来处理整形数据类型
    • 左移位操作符可以将操作数向左移动,低位补0。
    • 右移位操作符可以将操作数向右移动; 若符号为正,则高位补0; 若符号为负,则高位补1。
    • >>>为"无符号"右移位操作符,无论正负,都在高位补0。
    • 如果对char, byte,short类型的数进行移位处理,在移位之前会转成int类型,并且结果也是int类型的数。
    • <<=,>>-,>>>=可以将左边的值移动由右边的值指定的位数,再将结果赋给左边的变量。
    • 对byte或short值进行上述移位运算时,最后赋值时会导致截断,得到错误的结果。
  12. 三元操作符
    • 布尔表达式 ? 表达式0:表达式1。判断布尔表达式的值,若为true,则运算表达式0,并返回其值;若为false,则计算表达式1,并返回其值。
  13. 字符串操作符+和+=
    • 如果表达式以一个字符串起头,那么后续所有的操作数都必须是字符串类型。
  14. 使用操作符时常犯的错误
    • while(x=y)是C里面常见的错误,但Java中会检查括号内运算结构是否是布尔值;同时Java不会自动将int转换成布尔值,因此除非x和y都是布尔值,否则该错误会被编译器报告。
  15. 类型转换操作符
    • 可以对数值或者变量进行强制类型转换。
    • 窄化转换:将数据类型由大向小转换,可能面临信息丢失的危险,必须显式地进行转换。
    • 扩展转换:将数据类型由小向大转换,不会丢失任何信息,不必显示地进行转换。
    • 布尔型数据不允许进行任何类型的转换。
    • 除布尔型外,其他任何基本数据类型之间都可相互转换。
    • 类数据类型不允许进行类型转换。
    • 窄化转换中,不会进行四舍五入操作,若要四舍五入,需要采用Math类中的round()方法。
    • 在执行算术运算或按位运算时,只要比int小的数,都会自动转成int类型,并且结果也是int类型。
    • 通常,表达式中出现的最大数据类型决定了表达式最终结果的数据类型。
  16. Java没有sizeof
    • Java语言的数据类型占的空间在所有机器中都是相同的,因此不需要通过sizeof来获得数据字节数,方便移植。
  17. 操作符小结
    • 布尔型数据只能进行true,false的赋值及测试运算,不能进行加减等其他任何运算。
    • char,byte,short在算术运算时会被数据提升为int,必须将其显示地强制转换回原来的数据类型。
    • char,byte,short在进行复合赋值运算(+=)时,不需要显示地类型转换

初读"Thinking in Java"读书笔记之第三章 --- 操作符的更多相关文章

  1. 初读"Thinking in Java"读书笔记之第五章 --- 初始化与清理

    用构造器确保初始化 构造器可以确保每个对象都会得到初始化,Java毁在创建对象时自动调用构造器. 构造器采用与类名相同的名称,因此并不适合"每个方法首字母小写的风格". 构造器默认 ...

  2. 初读"Thinking in Java"读书笔记之第七章 --- 复用类

    组合语法 将对象引用置于新类中,即形成类的组合. 引用初始化方法 在定义处初始化. 在类的构造器中初始化. 在使用这些对象之前,进行"惰性初始化". 使用实例初始化. 继承语法 J ...

  3. 初读"Thinking in Java"读书笔记之第六章 --- 访问权限控制

    包:库单元 包内包含有一组类,他们在单一的名字空间下被组织在一起. 通过import ***.***.*可以将某个包下的所有类导入到当前文件中. 每个Java源文件最多只能有一个public类,且名称 ...

  4. 初读"Thinking in Java"读书笔记之第四章 ---控制执行流程

    true和false Java不允许将数字作为布尔值使用. 所有条件表达式都将布尔值作为判断条件,决定执行路径. if-lese 迭代 while,do-while,for为三个迭代语句. ,逗号操作 ...

  5. 初读"Thinking in Java"读书笔记之第二章 --- 一切都是对象

    用引用操纵对象 Java里一切都被视为对象,通过操纵对象的一个"引用"来操纵对象. 例如, 可以将遥控器视为引用,电视机视为对象. 创建一个引用,不一定需要有一个对象与之关联,但此 ...

  6. 初读"Thinking in Java"读书笔记之第九章 --- 接口

    抽象类和抽象方法 abstract void f();抽象方法是仅有声明而没有方法体的方法. 包含抽象方法的类叫做抽象类,如果一个类包含了一个抽象方法,则该类必须限定为抽象类. 抽象类和抽象方法可以使 ...

  7. 初读"Thinking in Java"读书笔记之第八章 --- 多态

    再论向上转型 在某些方法中,仅接收基类作为参数,而不是特殊的导出类,会使得程序更容易扩展. 转机 方法调用绑定 前期绑定(编译期绑定):在编译期将一个方法调用和方法主体关联起来. 后期绑定(动态绑定或 ...

  8. 《深入理解Java虚拟机》读书笔记(第三章)

    垃圾收集器与内存分配策略(第三章) 前言,众所周知,Java是由c++进化而来,c++在内存需自己申请,自己释放,于是就有了Java的动态内存分配.书的第三章开篇,有这样一句话描述的很妙——Java与 ...

  9. 《深入理解java虚拟机》读书笔记二——第三章

    第三章 垃圾收集器与内存分配策略 1.判断对象是否已死 引用计数法: 给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,每当引用失效时,计数器值就减1. 任何时刻计数器为0的对象就是不 ...

随机推荐

  1. python中import与from方法总结

    一.模块&包简介 模块:所谓模块就是一个.py文件,用来存放变量,方法的文件,便于在其他python文件中导入(通过import或from). 包(package): 包是更大的组织单位,用来 ...

  2. ArrayList源码阅读笔记(1.8)

    目录 ArrayList类的注解阅读 ArrayList类的定义 属性的定义 ArrayList构造器 核心方法 普通方法 迭代器(iterator&ListIterator)实现 最后声明 ...

  3. ubuntu使用抓包工具,charles

    参考官网:https://www.charlesproxy.com/documentation/installation/apt-repository/ wget -q -O - https://ww ...

  4. ExtJs写本地ArrayStore,ComboBox调用

    1.自定义本地ArrayStore var sCurStore = new Ext.data.ArrayStore({ //设备状态store fields: ["ckey", & ...

  5. jupyter notebook——安装配置

    本地登陆 cmd输入下面的命令,会进入用户主目录 jupyter notebook 在浏览器打开时,提示输入token,复制命令行上的token还是不能进入,其实浏览器上有提示的,按照提示操作即可,输 ...

  6. Caused by : java.io.IOException: Cleartext HTTP traffic to 《“url”》 not permitted

    一.问题原因: 根本原因是从Android9.0开始,出于完全因素考虑,默认不再支持http网络请求,需要使用 https. 二.解决方案: 解决的基本思路是:对指定的网址进行过滤,强制允许指定网址继 ...

  7. ubuntu下安装 java环境

    步骤1:下载jdk 我选择的jdk版本文件: jdk-8u201-linux-x64.tar 官网下载链接 步骤2:创建单独的目录 sudo mkdir /usr/local/java 步骤3:将下载 ...

  8. [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. 时间复 ...

  9. Hadoop OutputCommitter

    1. OutputCommitters MapReduce使用一个提交协议来确保作业(job)和任务(task)都完全成功或失败.这个通过 OutputCommiter来实现. 新版本 MapRedu ...

  10. Python的类的下划线命名的区别

    首先,单下划线开头,这个常被用于模块中,在一个模块中以单下划线开头的变量和函数被默认当做内部函数,如果使用from  module  import  *导入时,这部分变量和函数不会被导入.注意,如果使 ...