操作符

》》在最底层,java 中的数据是通过使用操作符来操作的。

》》操作符:

        (1)、加号和一元的正号(+)、减号和一元的负号(-)、

                     乘号(*)、除号(/)、赋值(=)。这些操作符几乎

                     都只能支持操作“基本数据类型”

        (2)、操作符:= 、 == 、 !=    这几个操作符能操作所有的

                     对象

       (3)、String 类支持 “+” 和 "+="

》》优先级:

                  最简单的规则就是先乘除后加减。程序员经常会忘记

          其他优先级规则,所以应该用括号明确规定计算顺序。

                 例如;

                 int a  ;

                 int b; 

                 System.out.println("a="+a+"b="+b)

                说明:在上面的输出语句中,包含“+”操作符。在这种上下

                文环境中,“+”意味着“字符串连接”,并且如果必要,它还要

                执行“字符串转换”。当编译器观察到一个  String 后面紧跟着

                一个“+”,而这个“+”的后面又紧跟一个 非 String类型的元素时,

                就会尝试着将这个非 String 类型的元素转换为 String 。正如,

               上面输出的内容中,它成功的将 a 和b 从 int 类型转换成了

                String 类型了。

》》赋值:

            操作符:“=”

           说明:“取右边的值(即右值),把它复制给左边(即左值)”

                        右值可以是任何常数、变量或者表达式(只要它能生成

                     一个值就行)。但是左值必须是一个明确的、已命名值的

                    变量。

                         也就是说,必须有一个物理空间可以存储等号右边的值。

》》对一个对象进行操作时,我们真正操作的是对对象的引用。所以

      倘若“将一个对象赋值给另一个对象”,实际是将“引用”从一个地方

      复制到另一个地方。

》》算术操作符:

           符号包括: +    、 -  、/   、*   和  % (取模操作符,它从整数

        除法中产生余数)。

            整数除法会直接去掉结果的小数位,而不是四舍五入地圆整结果。

》》java.util.Random

        Random  rand = new Random();

       说明:要生成数字,可以创建一个 Random 类的对象。如果在创建

                 过程中没有传递任何参数,那么java 就会将当前时间作为随机

                 数生成器的种子,并且由此在程序每一次执行时产生不同的输

                 出。

                      在创建 Random 对象时提供参数(即种子),该种子用于

               随机数生成器的初始化值,随机数生成器对于特定的种子值总

               是产生相同的随机数字序列

                      通过 Random 类的对象,程序可生成许多不同类型的随机

              数字。只需要调用方法 nextInt()  、 nextFloat()  、nextLong() 、

              nextDouble()  。传递给  nextInt() 的参数设置了所产生的随机数

               的上限,而其下限为  0 。

               (调用上面的方法,都是从 初始化new Random(); 的随机数字

               序列中取得数字)

》》自动递增和递减:

               操作符:   ++      、  --

                两种使用方式:-----前缀式(先执行运算,后生成值)

                                                   ++a    、 --a 

                                            -----后缀式(先生成值,再执行运算)

                                                  a++   、a--

》》关系操作符:

            ### 关系操作符生成的是一个  boolean 结果,它们计算的是操作数之间的关系。

            ###如果关系是真实的 ,关系表达式会生成 true ;如果关系不真实,关系表达式会       

                   生成 false 。

            ### 关系操作符: <  、 > 、 <=  、 >=  、==  、 !=

            ###其中, ==   、 !=  适用于所有的基本数据类型,而其他比较符不适用于boolean

                   类型

            ###关系操作符  == 、!= 也适用于所有的对象。只是比较的是对象的引用 

                   补充:如果想比较两个对象的实际内容是否相同  :使用 equals() 方法

                           但是该方法不适用于“基本数据类型”,基本数据类型直接使用 == 和 !=

                           即可。

           #### 如果在自己定义的类中使用 equals () 方法 ,需要自己详细定义该方法的具体

                   实现,覆盖了父类中的 equals () 方法,这样才会看到自己希望的比较结果。

           #### 大多数 Java类库都实现了 equals() 方法,以便用来比较对象的内容,而非

                    比较对象的引用。

》》逻辑操作符:------>使用双字符

          #### 操作符: 与 (&&)  、  或(||) 、  非(!)

                     根据参数的逻辑关系,生成一个布尔值(true  或 false),而且只可应用于

                 布尔值

          #### 注意,如果在应该使用  String 值的地方使用了布尔值,布尔值会自动转换

                 成适当的文本形式。

          #### 在程序中,可以将整数类型替换成除了布尔型以外的其他任何基本数据类型。

                 但是要注意的是,对浮点数的比较是非常严格的。即使一个数仅在小数部分与

                 另一个数存在极微小的差异,仍然认为它们是“不相等”的。即使一个数只比零大

                一点点,它仍然是“非零”值。

         ####  短路

》》直接常量:

         #### 直接常量后面的后缀字符标志了它的类型。

                    若为大写(或小写)L,代表 Long ,一般用大写的L ;

                    大写(或小写)F ,代表float ;

                    大写(或小写)D,代表 double

         #### 十六进制数适用于所有整数数据类型,以前缀 0x (或 0X)

                  后面跟随 0~9 或小写(或大写)的 a~f 来表示。

         #### 八进制前缀 0 以及后续的 0~7 的数字来表示。

         #### 在 Java 中二进制数没有直接常量表示方法。但是,在使用十六

                   进制和八进制记数法时,以二进制的形式显示结果将非常有用。

                   通过使用 Integer 和Long  类的静态方法 toBinaryString() 可以很

                   容易地实现这一点。

        #### 指数记数法:

                -----  在科学与工程领域,“e”代表自然对数的基数,约等于 2.718 

                (Java 中Math.E 给出了更精确的 double 的值)

                ----- 在Java 中用 e 代表“10 的幂次”

                     例如: 1.39e^(-43) 这样的表达式,真正的含义是 1.39 * 10^(-43)

                     补充:编译器通常会将指数作为双精度(double )来处理

》》按位操作符:------->使用单字符

       #### 按位操作符用来操作整数基本数据类型中的单个“比特”(bit),即

               二进制位。按位操作符对两个参数中对应的位执行布尔代数运算,

               并最终生成一个结果。

       #### 按位“与”:&

                 按位“或”:|

                 按位“异或”:^

                 按位“非”:~   ,也被称为取反操作符

                 (除了按位“非”是一元操作符,其他三种都是二元操作符)

      #### 由于位是非常“小”的,所以按位操作符仅使用了一个字符。

      #### 按位操作符可与等号(=) 联合使用,以便合并运算和赋值,

                &=  、|= 、^=  都是合法的(由于 ~ 是一元操作符,所以不可

              与"="联合使用)

     #### 我们将布尔类型作为一个单比特值对待,所以它多少有些独特,

             我们可对它执行按位“与”按位“或”按位“异或”运算,但是不能

            执行按位“非”

            但是在移位表达式中,不能使用布尔运算。

》》移位操作符:

      #### 移位操作符运算对象也是二进制的"位"。移位操作符只可用来

               处理整数类型(基本数据类型的一种)。

     ####左移位操作符(<<):能按照操作符右侧指定的位数来将操作符

                                                左边的操作数向左移动(在低位补0)

               “有符号"右移操作符(>>)则按照操作符右侧指定的位数将操

                                                作符左边的操作数向右移动。

     ####”有符号“右移操作符使用”符号扩展“:若符号为正,则在高位插入

                 0 ;若符号为负,则在高位插入1 。 

    #### Java 中增加了一种”无符号“右移操作符(>>>),它使用"零扩展":

              无论正负,都在高位插入0。

    #### 如果对 char 、 byte 或者 short 类型的数值进行移位处理,那么在

           移位进行之前,它们会被转换为 int 类型,并且得到的结果也是一个

          int 类型的值。只有数值右端的低 5 位才有用。

    #### 若对一个 long 类型的数值进行处理,最后得到的结果也是long 。

         此时只会用到数值右端的低 6 位。

   #### ”移位“可与”等号“(<<= 、>>=、>>>=)组合使用。此时,操作符

       左边的值会移动由右边的值指定的位数,再将得到的结果赋给左边的

       变量。

       (但是在进行”无符号“右移位结合赋值操作时,可能会遇到一个问题:

        如果对byte 或short 值进行这样的移位运算,得到的可能不是正确的

       结果)

   #### printBinaryInt() printBinaryLong()   分别接受 int 或long 类型的

          参数,并用二进制格式输出。

   #### 数字的二进制表示形式称为”有符号的二进制补码

》》三元操作符

        ####三元操作符也称为条件操作符。

        ####操作符:   boolean-exp?   value0  : value 1

                 如果 boolean-exp 的结果为 true :则计算 value0

                 如果 boolean-exp 的结果为false :则计算 value1

        ####三元操作符 和  if--else 完全不同,因为它会产生一个值。

        #### 在使用三元操作符时,请务必仔细考虑

》》字符串操作符 + 和 += 

       #### 这个操作符在 Java 中有一项特殊的用途:连接不同的字符串。

       #### 如果表达式以一个字符串起头,那么后续所有操作数都必须是

                 字符串型(请记住,编译器会把双引号内的字符序列自动转成

                字符串)

》》使用操作符时常犯的错误:

      #### 即使对表达式如何计算有点不确定,也不愿意使用括号。

》》类型转换操作符:

     ####类型转换运算允许我们显式地进行数据类型的转换,或者不能在

            自动进行转换的时候强制进行类型的转换。

    #### 要想执行类型转换,需要将希望得到的数据类型置于圆括号内,

             放在要进行类型转换值的左边。

    #### 即可对数值进行类型转换,亦可对变量进行类型转换。

              (编译器在必要的时候会自动进行  int 值到 long  值的提升)

    ####如果要执行一种名为窄化转换的操作(也就是说,将能容纳

         更多信息的数据类型转换成无法容纳那么多信息的类型),就有可能

         面临信息丢失的危险。 必须显示地进行类型转换

    #### 对于扩展转换,则不必显示地进行类型转换,因为新类型肯定能

        容纳原来类型的信息,不会造成任何信息的丢失。

   #### Java 允许我们把任何基本数据类型转换成别的基本数据类型,

         但是布尔值根本不允许进行任何类型的转换处理。

   #### 截尾和舍入

            ----在执行窄化转换时,必须注意截尾和舍入问题。例如,如果将一个

                浮点值转换为整型值,java 会如何处理呢?

                **** 在将 float 或 double 转型为整型值时,总是对该数字执行截尾

                ****如果想要得到舍入的结果:需要使用  java.lang.Math 中的  round

                      方法

  #### 提升:

            --- 通常,表达式中出现的最大的数据类型决定了表达式最终

                结果的数据类型(小的数据类型会自动提升为大的数据类型)

》》Java中没有 sizeof

     #### Java 不需要 sizeof() 操作符,因为所有的数据类型在所有机器中

            的大小都是相同的。我们不必考虑移植问题----它已经被设计在语言

           中了。

》》操作符小结:

        #### 能够对布尔型值进行的运算非常有限。我们只能赋予它 true 或 false 值,

                并测试它为真还是假,而不能将布尔值进行相加,或对布尔值进行其他

                任何运算

       #### 如果对两个足够大的 int 值执行乘法运算,结果会溢出。

       #### 当类型转换为一种较小的类型时,必须留意”窄化转换“的结果,否则会

               在类型转化过程中不知不觉地丢失了信息。

   

               

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小达人Fighting

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值