zoukankan      html  css  js  c++  java
  • 02_Java基本语法_3

     

    2.2.10 运算符、表达式与语句

    程序是由许多语句组成的,而语句的基本单位是表达式与运算符。本节将介绍Java运算符的用法、表达式与运算符之间的关系,以及表达式里各种变量的数据类型的转换等。学完本节,希望大家能对Java语句的运作过程有更深一层的认识。

    2.2.10.1运算符

    Java提供了许多的运算符,这些运算符除了可以处理一般的数学运算外,还可以做逻辑运算、地址运算等。

    根据操作数的个数的不同,可以将运算符分为:单目运算符(++、--)、双目运算符(+,-,*)、三目运算符(?: 运算符)

    根据使用场合的不同,运算符可分为赋值运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、括号运算符、位运算符等。

    2.2.10.1.1 赋值运算符号

    想为各种不同数据类型的变量赋值时,就必须使用赋值运算符(=),表2-7中所列出的赋值运算符虽然只有一个,但它却是Java语言中必不可缺的。

    表2-7  赋值运算符

     

    等号(=)在Java中并不是“等于”的意思,而是“赋值”的意思。还记得在前几章中,为变量赋值的语句吗?

     

    图2-6  表达式的赋值范例

    上面的语句是将整数22赋值给num这个变量。再来看看下面这个语句:

    num = num - 3;  // 将num-3的值运算之后再赋值给变量num存放

    从未学习过C或C++的学生,可能会不习惯这种思考方式。若是把等号(=)当成“等于”,这种语句在数学上根本说不通,但是把它看成“赋值”时,这个语句就很容易理解了,把num-3的值运算之后再赋值给num存放,因为之前已经把num的值设为22,所以执行这个语句时,Java会先处理等号后面的部分num-3(值为19),再赋值给等号前面的变量num,执行后,存放在变量num的值就变成了19了。将上面的语句编写成下面这个程序:

    范例:TestJava2_15.java 

    //在程序中赋值采用“=”
    
    public class TestJava2_15
    {
        public static void main(String args[])
        {
    
            int num = 22; //声明整数变量num,并赋值为22
    
            System.out.println("第一次赋值后,num = " + num);//输出num的值
    
            num = num - 3;//将变量num的值减三之后再赋给num变量
    
            System.out.println("改变之后的值,num = " + num);//输出计算后num的值
    
        }
    
    }

    输出结果:

    第一次赋值后,num = 22

    改变之后的值,num = 19

    当然,在程序中也可以将等号后面的值赋值给其他的变量,如:

    in sum = num1+num2 ;   // num1与num2相加之后的值再赋给变量sum存放

    num1与num2的值经过运算后仍然保持不变,sum会因为“赋值”的操作而更改内容。

    2.2.10.1.2 算术运算符

    算术运算符在数学上面经常会使用到,表2-8列出了它的成员:

    表2-8  算术运算符

     

    ·加法运算符“+”

    将加法运算符“+”的前后两个操作数相加。如下面的语句:

    System.out.println("3 + 8 = "+(3+8)); // 直接输出表达式的值

    ·减法运算符“-”

    将减法运算符“–”前面的操作数减去后面的操作数,如下面的语句:

    num = num - 3; // 将num - 3运算之后赋值给num存放

    a = b - c;    // 将b - c运算之后赋值给a存放

    ·乘法运算符“*”

    将乘法运算符“*”的前后两个操作数相乘,如下面的语句:

    b = b * 5;   //  将b*5运算之后赋值给b存放

    a = a * a;   // 将a * a运算之后赋值给a存放

    ·除法运算符“/”

    将除法运算符“/”前面的操作数除以后面的操作数,如下面的语句:

    a = b / 5;   // 将b / 5运算之后的值赋给a存放

    c = c / d;   // 将c / d运算之后的值赋给c存放

    使用除法运算符时要特别注意一点:除数不能为0。还有就是数据类型的问题。以上面的例子来说当a、b、c、d的类型皆为整数,若是运算的结果不能整除时,输出的结果与实际的值会有差异,这是因为整数类型的变量无法保存小数点后面的数据,因此在声明数据类型及输出时要特别小心。以下面的程序为例,在程序里给两个整型变量a、b赋值,并将a / b的运算结果输出:

    范例:TestJava2_16.java

    //下面这段程序说明了除法运算符的使用方法
    
    public class TestJava2_17
    {
        public static void main(String[] args)
        {
    
            int a = 13;
    
            int b = 4;
    
            System.out.println("a = " + a + " , b = " + b);
    
            System.out.println("a / b = " + (a / b));
    
            System.out.println("a / b = " + ((float) a / b));    // 进行强制类型转换
    
        }
    }

    输出结果:

    a = 13 , b = 4

    a / b = 3

    a / b = 3.25

    程序说明:

    1、第9行与10行,程序分别做出不同的输出:第10行中,因为a,b皆为整数类型,输出结果也会是整数类型,程序运行结果与实际的值不同。

    2、第10行中,为了保证程序运行结果与实际的值相同,所以使用了强制性的类型转换,即将整数类型(int)转换成浮点数类型(float),程序运行的结果才不会有问题。

    ·余数运算符“%”

    将余数运算符“%”前面的操作数除以后面的操作数,取其所得到的余数。下面的语句是余数运算符的使用范例:

    num = num % 3; // 将num%3运算之后赋值给num存放

    a = b % c;     // 将b%c运算之后赋值给a存放

    注意:与C/C++不同,Java里面的%除了可以用于整型数据还可以用于浮点型数据(float、double)。以下面的程序为例,声明两个整型变量a、b,并分别赋值为5和3,再将a%b的运算结果输出。

    范例:TestJava2_17.java 

    //在JAVA中用%进行取模操作
    
    public class TestJava2_17
    {
        public static void main(String[] args)
        {
    
            int a = 5;
    
            int b = 3;
    
            System.out.println(a + " % " + b + " = " + (a % b));
    
            System.out.println(b + " % " + a + " = " + (b % a));
    
        }
    }

    输出结果:

    5 % 3 = 2

    3 % 5 = 3

    ·正数运算符“+”

    ·负数运算符“-”

    如下面的语句:

    +3//表示正3

    b = -a//表示将-a的值赋给变量b

    除此之外,还有一些缩写的算术运算符,形如:+=、-=、/=、*=、%=等等。

    2.2.10.1.3 递增与递减运算符

    递增与递减运算符在C/C++中就已经存在了,Java仍然将它们保留了下来,是因为它们具有相当大的便利性。表2-9列出了递增与递减运算符的成员。

    表2-9  递增与递减运算符

     

    善用递增与递减运算符可使程序更加简洁。例如,声明一个int类型的变量a,在程序运行中想让它加1,语句如下:

    a = a+1;  // a加1后再赋值给a存放

    将a的值加1后再赋值给a存放。也可以利用递增运算符“++”写出更简洁的语句,而语句的意义是相同的:

    a++;  // a加1后再赋值给a存放,a++为简洁写法

    在程序中还可以看到另外一种递增运算符“++”的用法,就是递增运算符“++”在变量的前面,如++a,这和a++所代表的意义是不一样的。

    a++:先执行整个语句后再将a的值加1

    ++a:则先把a的值加1后,再执行整个语句

    以下面的程序为例,将a与b的值皆设为3,将a++及++b输出来,可以轻易地比较出两者的不同。

    范例:TestJava2_18.java

    //下面这段程序说明了“++”的两种用法的使用
    
    public class TestJava2_18
    {
        public static void main(String args[])
        {
    
            int a = 3, b = 3;
    
            System.out.print("a = " + a); // 输出a
    
            System.out.println(" , a++ = " + (a++) + " , a= " + a);  // 输出a++和a
    
            System.out.print("b = " + b); // 输出b
    
            System.out.println(" , ++b = " + (++b) + " , b= " + b);  // 输出++b和b
    
        }
    }

    输出结果:

    a = 3 , a++ = 3, a= 4 

    b = 3 , ++b = 4 , b= 4 

    程序说明:

    1、在第8行中,输出a++及运算后的a的值,所以执行完a++后,a的值才会加1,变成4。

    2、程序的第10行中,输出++b运算后b的值,所以执行++b前,b的值即先加1,变成4。

    同样的,递减运算符“--”的使用方式和递增运算符“++”是相同的,递增运算符“++”用来将变量值加1,而递减运算符“--”则是用来将变量值减1。

    应当注意当多个++表达式连在一起的情况,如下:

            int i = 0;
    
            int a = (i++) + (i++) + (i++);
    
            //a=i++  a=0  i=1  a+=i++  a=1  i=2  a+=i++  a=3  i=3
    
            int b = (++i) + (++i) + (++i);
    
            //b=++i  i=4  b=4  b+=++i  i=5  b=9  b+=++i  i=6  b=15
    
            System.out.println("a=" + a);//3
    
            System.out.println("b=" + b);//15   

    此外,递增与递减运算符只能将变量加1或减1,若是想要将变量加减非1的数时,还是得用原来的“a = a+2”的方法或“a += 2”的方法。

    2.2.10.1.4 关系运算符与 if 语句

    常常会在if语句中使用到关系运算符,所以有必要先来认识if语句的用法。

    if语句的格式如下:

    if (判断条件)

    语句;

    如果括号中的判断条件成立,就会执行后面的语句;若是判断条件不成立,则后面的语句就不会被执行,如下面的程序片段:

    if (x>0)

    System.out.println("I like Java!");

    当x的值大于0,就是判断条件成立时,会执行输出字符串“I like Java!”的操作;相反,当x的值为0或是小于0时,if语句的判断条件不成立,就不会执行上述操作了。表2-10列出了关系运算符的成员,这些运算符在数学上也是经常使用的。

    表2-10  关系运算符

     

    在Java 中,关系运算符的表示方式和在数学中很类似,但是由于赋值运算符为“=”,为了避免混淆,当使用关系运算符“等于”(==)时,就必须用2个等号表示;而关系运算符“不等于”的形式有些特别,用“!=”代表,这是因为在键盘上想要取得数学上的不等于符号“≠”较为困难,所以就用“!=”表示不等于。

    当使用关系运算符去判断一个表达式的成立与否时,若是判断式成立会产生一个响应值true,若是判断式不成立则会产生响应值false。以下面的程序为例,判断if语句括号中的条件是否成立,若是成立则执行if后面的语句。

    范例:TestJava2_19.java

     

    //下面这段程序说明了关系运算符的使用方法,关系运算符返回值为布尔值
    
    public class TestJava2_19
    {
        public static void main(String[] args)
        {
    
            if (5 > 2)
            {
                System.out.println("返回值:" + (5 > 2));
            }
    
            if (true)
            {
                System.out.println("Hello Java!");
            }
    
            if ((3 + 6) == (3 - 6))
            {
                System.out.println("I like Java!");
            }
        }
    }

     

     

    输出结果:

    返回值:true

    Hello Java!

    程序说明:

    1、在第6行中,由于5>2的条件成立,所以执行第7行的语句:输出“返回值:true”。

    2、在第8行中,若是if语句的参数为true,判断亦成立,所以接着执行第10行的语句:输出字符串“Hello Java!”。

    3、第10行,3+6并不等于3-6,if的判断条件不成立,所以第11行语句不被执行。

    2.2.10.1.5 逻辑运算符

    在if语句中也可以看到逻辑运算符,表2-11列出了它的成员。

    表2-11  逻辑运算符

     

    !为单目操作符,结合顺序为从右向左,&&和||为双目运算符,结合顺序为从左向右。当使用逻辑运算符&&时,运算符前后的两个操作数的返回值皆为真,运算的结果才会为真;使用逻辑运算符“||”时,运算符前后的两个操作数的返回值只要有一个为真,运算的结果就会为真,如下面的语句:

    (1) a>0 && b> 0 // 两个操作数皆为真,运算结果才为真

    (2) a>0 || b>0    // 两个操作数只要一个为真,运算结果就为真

    在第1个例子中,a>0而且b>0时,表达式的返回值为true,即表示这两个条件必须同时成立才行;在第2个例子中,只要a>0或者b>0,表达式的返回值即为true,这两个条件仅需要一个成立即可,可以参考表2-12中所列出的结果:

    表2-12  &&和||结果表

     

    由表2-12可以看出,在条件中,只要有一个条件为假(false),相与的结果就是假(false);相反的如果有一个条件为真(true),那么相或的结果就为真(true)。

    下面的这个程序是判断a的值是否在0~100之间,如果不在即表示成绩输入错误;若是a的值在50~60之间,则需要补考。

    范例:TestJava2_20.java

    //下面这段程序是对与操作进行的说明,返回值为布尔类型
    
    public class TestJava2_20
    {
        public static void main(String[] args)
        {
            int a = 56;
    
            if ((a < 0) || (a > 100))
            {
                System.out.println("输入的数据有错误!");
            }
    
            if ((a < 60) && (a > 49))
            {
                System.out.println("准备补考吧!");
            }
        }
    }

    输出结果:

    准备补考吧!

    程序说明:

    1、当程序执行到第7行时,if 会根据括号中a的值作判断,a<0或是a>100时,条件判断成立,即会执行第8行的语句:输出字符串“输入的数据有错误!”。由于学生成绩是介于0~100分之间,因此当a的值不在这个范围时,就会视为是输入错误。

    2、不管第8行是否有执行,都会接着执行第9行的程序。if再根据括号中a的值做判断,a<60且a>49时,条件判断成立,表示该成绩需要进行补考,即会执行第10行的语句,输出“准备补考吧!”。

    需要注意的是:||和&&有时候会引起短路。比如:

    int a = 10;

    int b = 20;

    boolean c = ((a < 10) && (++b > 0));

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

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

    System.out.println("c="+c);

    输出结果:

    a=10

    b=20

    c=false

    程序说明:

    从输出结果可以看出b的值没有改变。当判断条件a<10时,发现不成立就已经可以确定整个表达式的真假情况,所以引起短路,此时就不再做++b>0的操作。

    遵循的原则就是:只对能够确定整个表达式值所需要的最少数目的子表达式进行计算。也就是说,当计算出一个子表达式的值后便可确定整个逻辑表达式的值时,后面的子表达式就不需要再计算了,这种表达式也称为短路表达式

    如果下列条件满足:

    表达式1 && 表达式2中,表达式1为false,整个表达式为false,表达式2不执行

    表达式1 || 表达式2中,表达式1为true,整个表达式为true,表达式2不执行

    例如:int a=0, b=3;对于表达式(a>0) && (b++ > 0);和(b>0) || (++a > 0);结果是b++和++a都不会得到执行,a, b的值不变。

    感谢阅读。如果感觉此章对您有帮助,却又不想白瞟

                                     

  • 相关阅读:
    初识Mysql 连接器的收获(包含JDBC API最新文档)以及一些c++的有用技巧
    重拾 ”多项式“ 给我的启示
    vs2015下配置MySQL,使之能使用c++连接完美运行
    在CentOS上使用yum安装java
    CentOS 用yum安装中文输入法
    Redhat Linux RHEL5配置CentOS YUM更新源
    转:Linux下which、whereis、locate、find 命令的区别
    Centos 挂载NTFS格式的USB硬盘
    scp采用无密码在两台linux服务器之间传输数据
    转:Andriod studio技巧合集
  • 原文地址:https://www.cnblogs.com/springl/p/8710182.html
Copyright © 2011-2022 走看看