第三章 操作符

3.1 更简单的打印语句

静态导入(static import)

import java.util.*;
import static net.mindview.util.Print.*;

public class HelloDate{
    public static void main(String[] args){
        print("Hello, it's ");
        print(new Date());
    }
}

3.2 使用Java操作符

操作符作用于操作数,生成一个新值。有些操作符可能会改变操作数自身的值,这被称为“副作用”。那些能改变操作数的操作符,最普遍的用途就是用来产生副作用。
几乎所有的操作符都只能操作“基本类型”。例外的操作符是===!=,这些操作符能操作所有的对象。除此之外,String类支持“+”和“+=”。延展——使用方法操作非基本类型(对象),比如math里面的add方法等。

3.3 优先级

不必记得所有的操作符的优先级,可使用括号明确规定计算顺序。

3.4 赋值

基本数据类型的赋值是值传递,即直接将一个地方的内容赋值到另外一个地方(不同的存储地址)。
对象的赋值是引用传递,即将“引用”从一个地方赋值到另外一个地方,两个引用指向的是同一个对象(同一个存储地址)。
别名现象:将同一个对象的引用赋值给两个不同的变量,比如:

Class t1 = new Class();
Class t2 = t1;

3.4.1 方法调用中的别名问题

class A{
    int x;
}
public class B{
    static void function(A a){
        a.x = "b";
    }
}
public static void main(String[] args){
    A a =new A();
    a.x = "c";
    function(a); //实际改变的方法function之外的对象a
}

3.5 算术操作符

+、-、*、/、%(取模,他从整数除法中产生余数。)

3.5.1 一元加、减操作符

一元减号(-,取反)、一元加号(+,将较小类型的操作数提升为int)

3.6 自动递增和递减

前缀递增和递减:先执行运算,再生成值;
后缀递增和递减:先生成值,再执行运算。

3.7 关系操作符

关系操作符生成的是一个boolean结果:<、>、<=、>=、==、!=

3.7.1

==和!=比较基本类型时,比较的是值;而比较对象时,比较的是对象的引用。因而比较两个对象的实际内容时,必须使用equals()方法,但equals方法默认比较的也是引用,所以如果要比较实际内容,需要重写equals方法。

class Value{
    int i;
}
public class EqualsMethod{
    public static void main(String[] args){
        Value v1 = new Value();
        Value v2 = new Value();
        v1.i = v2.i = 100;
        System.out.println(v1.equals(v2)); // false
        v1 = v2;
        System.out.println(v1.equals(v2)); // true
    }
}

3.8 逻辑操作符

根据参数的逻辑关系,生成一个布尔值:&&、||、!
//!:注释语句,这种注释语法使得注释能够被自动移除以方便测试

3.8.1 短路

短路算法有助于获得潜在的性能提升。

3.9 直接常量

使用直接常量相关的某些字符来额外增加一些信息,让编译器可以准确的知道要生成什么样的类型。
L/l:long
F/f:float
D/d:double
前缀0x(0X):十六进制
前缀0:八进制
可使用Integer或者Long的toBinaryString()方法显示二进制。注意:如果将比较小的类型(short、byte)传递给Integer.toBinaryString()方法,则该类型将自动转换为int。

3.10 按位操作符

按位操作符用来操作整数基本数据类型中的当个“比特”(bit),即二进制位。
&:按位“与”
|:按位“或”
^:按位“异或”
~:按位“非”,取反操作符,属于一元操作符
按位操作符具有与逻辑操作符相同的效果,区别在于按位操作符不会中途“短路”。

3.11 移位操作符

移位操作符操作的运算对象也是二进制“位”,且值可用来处理整数类型。
左移位操作符(<<):能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0)。
“有符号”右移操作符(>>):按照操作符左侧指定的位数将操作符右边的操作数向右移动。“有符号”右移位操作符使用“符号扩展”:若符号为正,则在高位补0,若符号为负,则在高位补1。
“无符号”右移操作符(>>>):它使用“零扩展”,无论正负,都在高位插入0。

3.12 三元操作符 if-else

三元操作符也称为条件操作符,它显得比较特别,因为它有三个操作数:
boolean-exp ? value1 : value2

3.13 字符串操作符 + 和 +=

连接不同的字符串。

3.15 类型转换操作符

int i = 100;
long lng1 = (long)i;
long lng2 =(long)200;

窄化转换(narrowing conversion):将容纳更多信息的数据类型转换成无法容纳那么多信息的类型,比如Object转换为String。这种情况可能面临信息丢失的危险。这个时候,编译器要求显示强制进行类型转换。
扩展转换(widening conversion):不必显示的进行类型转换,不会造成信息的丢失。
Java允许把任何基本数据类型转换成别的基本数据类型,但布尔类型除外,后者根本不允许进行任何类型的转换处理。“类”数据类型不允许进行类型转换,除非采用特殊的方法:继承。

3.15.1 截尾和舍入

将folat或double转型为整型值时,总是对该数字执行截尾。如果想要得到舍入的结果,就需要用到java.lang.Math中的round()方法。

3.15.2 提升

表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容

  • 在最底层,Java中的数据是通过使用操作符来操作。 3.1 简单的打印语句 3.2使用Java操作符 几乎所有的操...
    咱就一山里人阅读 390评论 0 0
  • 在最底层,java中的数据是通过使用操作符来操作的 3.1更简单的打印语句 这篇简单介绍了下静态导入的概念 imp...
    WandaGao阅读 461评论 0 0
  • 1.赋值“=” 取右边的值复制给左边,右值可以是任何常数、变量或者表达式,但左值必须是一个明确的、已命名的变量,也...
    萝卜枣阅读 282评论 0 0
  • 在最底层,java中的数据是通过使用操作符来操作的。 副作用:有些操作符会改变操作数自身的值。 别名现象:对象赋值...
    MAXPUP阅读 72评论 0 0
  • 3.3优先级 最简单的规则就是:先乘除后加减.3.4赋值和方法调用别名(引用)3.5操作运算符一元加,减和加号,减...
    浩林Leon阅读 177评论 0 1