Skip to content

8.常量、常量、运算符

Java中的包、类、方法、参数和变量的名称总称为标识符 下面代码中红字为标识符:

  1. com.neuedu.ch01:包名
  2. FirstTest:类名
  3. main:方法名
  4. args:参数和变量名称

标识符的命名规则

  1. 必须以字母、下划线(_)或美元符号($)开头;
  2. 余下的字符可以是下划线、美元符号或任何的字母或数字,长度不限;
  3. 标识符中不能有空格;
  4. 不能使用Java中的关键字或者保留字做为标识符;

命名规范是一种约定,也是程序员之间良好沟通的桥梁。

  1. Pascal 规则:组成标识符的每个单词的首字母大写,其余字母小写的书 写约定。对于缩写的双字母单词,要求全部大写。
  2. Camel 规则:标识符的首字母小写,每个后面连接的单词的首字母大写 ,其余字母小写的书写约定。对于缩写的双字母单词,要求它们出现在 标识符首部时全部小写,否则全部大写。
元素规范示例
类名Pascal规则Person StudentDemo
变量名Camel规则age height avgValue
方法名Camel规则getAge setUserName
包名全部小写com.neusoft
常量名全部大写MAX_VALUE

8.1 Java中的常量

常量指程序里持续不变的值,在整个程序运行过程中它是不可改变的 在Java中,必须指定数据类型 常见的常量类型有:

  1. 整型常量,如:123,067,0X1D,123L
  2. 浮点数常量,如:123.4,.18,1.8e1,1.2D,1.2F
  3. 布尔型常量,如:true,false
  4. 字符常量,如:’a’,’8’,‘\n’,‘\u123f’
  5. 字符串常量,如:“a”,“hello”
  6. 引用类型常量,:null

8.2 变量

变量是指在程序的运行过程中随时可以发生变化的量

变量是程序中数据的临时存放场所

保存程序运行时用户输入的数据

特定的运算结果等

8.2.1 变量的声明

变量类型 变量名字 [ = 初始值];

8.2.2 数据类型及分类

在Java中,数据类型分为两大类:

基本数据类型:4类8种基本数据类型

引用数据类型: 类、接口、数组

  1. 整形:整数类型包含:byte、short、int(默认)、long

    java
    byte  b1 = 127;
    short s1 = 100;
    int i1 = 100;
    long l1 = 100L;
    
    System.out.println("b1:"+b1);
    System.out.println("s1:"+s1);
    System.out.println("i1:"+i1);
    System.out.println("l1:"+l1);
  2. 浮点型

    java
    double d1 = 3.14;
    float f1 = 6.55f;
    System.out.println("d1:"+d1);
    System.out.println("f1:"+f1);
  3. 布尔类型

    布尔类型 — boolean boolean类型适于逻辑运算,一般用于表示真或假 boolean 数据类型只有两个值:true 和 false

    java
    boolean bool1  = true;
    boolean bool2  = false;
    
    System.out.println("bool1:"+bool1);
    System.out.println("bool2:"+bool2);
  4. 字符类型

    字符类型包含:char Java中的字符类型的值通常用英文单引号括起来,代表单个字符 Java字符类型有固定的长度为:16位,是一个16位无符号整数。 最小值:0, 最大值:65535 = 2^16-1 '0'与'\u0000'不是同一个字符 字符通常为:英文字母、中文字、其他国家文字、数字、转义序列、特殊字符等,例如:

    Java中的字符也可用十六进制编码形式表示,例如:

    转义字符:使用”\”把其转化成字符的本身输出,那么使用”\”的字符称作为转义字符。 需求:使用输出语句,打印出带引号的信息如输出:你好”中国”编写代码为:System.out.println(“你好”中国“”);编译是无法正常通过的。语法有错误,编译器读到第二个引号就认为是字符串的结束,剩余的不知道怎么处理。如何解决这个问题:java中使用转义字符来表示特殊的字符。一个转义字符以反斜杠(\)开始。例如:

8.3 运算符和表达式

运算符(操作符)

是一种特殊的符号,用以表示数据的运算、赋值和比较

运算符的种类:

赋值运算符:=、+=、﹣=、=、/=、%=**

算术运算符: +、﹣、*、/、%、++、 --

比较运算符:>、<、>=、 <=、= =、!=、instanceof

逻辑运算符:!、&&、||

位运算符: &、|、^ 、 ~、>>、<<、>>>

条件运算符: ?: 条件运算符很独特,因为它是用三个操作数组成的三元运算符。

8.3.1 赋值运算符

操作符描述例子
=简单的赋值运算符,将右操作数的值赋给左侧操作数C = A + B将把A + B得到的值赋给C
+ =加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数C + = A等价于C = C + A
- =减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数C - = A等价于C = C - A
* =乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数C * = A等价于C = C * A
/ =除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数C / = A,C 与 A 同类型时等价于 C = C / A
(%)=取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数C%= A等价于C = C%A
<< =左移位赋值运算符C << = 2等价于C = C << 2
>> =右移位赋值运算符C >> = 2等价于C = C >> 2
&=按位与赋值运算符C&= 2等价于C = C&2
^ =按位异或赋值操作符C ^ = 2等价于C = C ^ 2
| =按位或赋值操作符C | = 2等价于C = C | 2
java
public class Operator1 {

    /**
     * 赋值操作符
     * @param args
     */
    public static void main(String[] args) {

        //将右侧算完的值,赋值给左侧
        int num = 10 + 20;

        int numb = 10;

        numb += 5; //numb = numb + 5;

        System.out.println("num : \t"+num);
        System.out.println("numb : \t"+numb);

    }
}

8.3.2算术运算符

算数运算符操作数必须是数值类型 分为一元运算符和二元运算符: 一元运算符,只有一个操作数; 二元运算符有两个操作数,运算符在两个操作数之间

操作符描述例子
+加法 - 相加运算符两侧的值A + B 等于 30
-减法 - 左操作数减去右操作数A – B 等于 -10
*乘法 - 相乘操作符两侧的值A * B等于200
/除法 - 左操作数除以右操作数B / A等于2
取余 - 左操作数除以右操作数的余数B%A等于0
++自增: 操作数的值增加1B++ 或 ++B 等于 21(区别详见下文)
--自减: 操作数的值减少1B-- 或 --B 等于 19(区别详见下文)

8.3.2.1 一元运算符

正‘+’,负‘-’,自加‘++’,自减‘--‘这四个。

正负号(+,-):在数值前,表示正数还是负数

自增、自减运算符: ++, --

自增、自减运算符可以用于数值变量之前或者之后

i++, 后++, 先将i的值作为整个表达的值, 然后将i增加1.

++i, 先++, 先将i增加1, 然后将i的值作为整个表达的值.

i--, 后--, 先将i的值作为整个表达的值, 然后将i减少1.

--i, 先--, 先将i减少1, 然后将i的值作为整个表达的值.

8.3.2.2 二元运算符

二元运算符:加'+',减'-',乘'',除'/',求余'%'。

在算数运算符中,”+“,”-“,”“,”/“完成加减乘除四则运算,%是求两个操作数相除后的余数。

运算规则和数学运算基本相同,在算数运算中,计算时按照从左向右的顺序计算,乘除和求余优先于加减,不同的是,程序中的乘运算符不可省略,在数学中可写为”y=2x“而程序中必须写为”y=2*x“。

java
public class Operator2 {

    /**
     *
     * @param args
     */
    public static void main(String[] args) {

        /*
         * 算数运算符
         */

        //一元运算  +、-、++、--
        int num = 10;
        int numb = 10;
        System.out.println("-num:\t"+(-num));


        //++ 放后面
        System.out.println("num++"+(num++)); // 10
        //++放前面,优先计算++
        System.out.println("++numb"+(++numb)); //11

        System.out.println("num"+(num)); // 11
        System.out.println("numb"+(numb)); //11


        //二元算数运算符

        num = 10;
        numb = 4;
        double d1 = 3.0;
        double d2 = 6.0;


        System.out.println("d1+d2 \t"+(d1+d2));
        System.out.println("num+d1 \t"+(num+d1));

        System.out.println("d1*num \t"+(num*d1));
        System.out.println("d2/d1 \t"+(d2/d1));


        //乘除法
        System.out.println("num*numb \t"+(num*numb)); // 40
        //整形除以整形 还是整形
        System.out.println("num/numb \t"+(num/numb)); //2

        //取模
        System.out.println("num%numb \t"+(num%numb)); //2

    }
}

8.3.3 关系运算符(比较运算符)

运算符描述例子
==检查如果两个操作数的值是否相等,如果相等则条件为真。(A == B)为假。
!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。(A != B) 为真。
>检查左操作数的值是否大于右操作数的值,如果是那么条件为真。(A> B)为假。
<检查左操作数的值是否小于右操作数的值,如果是那么条件为真。(A <B)为真。
>=检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。(A> = B)为假。
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。(A <= B)为真。
java
public class Operator3 {

    /**
     * 关系运算,比较运算
     * @param args
     */
    public static void main(String[] args) {

        int numa = 100;
        int numb = 100;
        int numc = 102;


        //关系运算的返回值,boolean  true 真的, 反之false
        System.out.println("numa > numb\t:"+(numa > numb));  //false
        System.out.println("numa < numc\t:"+(numa < numc));  //true
        System.out.println("numa >= numb\t:"+(numa >= numb)); //true
        System.out.println("numa <= numb\t:"+(numa <= numb)); //true
        System.out.println("numa != numb\t:"+(numa != numb)); //false

    }
}

8.3.4逻辑运算符(布尔运算符)

操作符描述例子
&&称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。(A && B)为假。
| |称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。(A | | B)为真。
称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。!(A && B)为真。
java
public class Operator4 {

    /**
     * 逻辑运算符
     * @param args
     */
    public static void main(String[] args) {

        int numa = 100;
        int numb = 100;
        int numc = 102;

        boolean success = numa>=numb && numb<=numc;

        System.out.println("numa>=numb && numb<=numc :"+(numa>=numb && numb<=numc));
        System.out.println("numa>=numb && numb<=numc :"+( true && true));


        //&&
        System.out.println("true && true: "+(true && true));   // true
        System.out.println("true && false: "+(true && false)); // false
        System.out.println("false && false: "+(false && false)); //false

        // ||
        System.out.println("true || true: "+(true || true));  //true
        System.out.println("true || false: "+(true || false)); //true
        System.out.println("false || false: "+(false || false)); //false


        //  ! 取反
        System.out.println("!true \t"+(!true));
        System.out.println("!false \t"+(!false));


    }
}

8.3.5位运算

只对byte、short、char、int、long有效

操作符描述例子
如果相对应位都是1,则结果为1,否则为0(A&B),得到12,即0000 1100
|如果相对应位都是 0,则结果为 0,否则为 1(A | B)得到61,即 0011 1101
^如果相对应位值相同,则结果为0,否则为1(A ^ B)得到49,即 0011 0001
按位取反运算符翻转操作数的每一位,即0变成1,1变成0。(〜A)得到-61,即1100 0011
<<按位左移运算符。左操作数按位左移右操作数指定的位数。A << 2得到240,即 1111 0000
>>按位右移运算符。左操作数按位右移右操作数指定的位数。A >> 2得到15即 1111
>>>按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。A>>>2得到15即0000 1111
java
public class Operator5 {

    /**
     * 位运算
     * @param args
     */
    public static void main(String[] args) {

        int numa = 4;
        int numb = 5;


        System.out.println("numa & numb:"+(numa&numb));
        System.out.println("numa | numb:"+(numa|numb));



        System.out.println("numa>>1: \t"+(numa>>1));
        System.out.println("numa<<1: \t"+(numa<<1));

        System.out.println("1>>>1\t"+(1>>>1));
        System.out.println("-1>>>1\t"+(-1>>>1));

    }
}

8.3.6 条件运算符(?:)

条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。

java
variable x = (expression) ? value if true : value if false
java
int age = 61;

boolean success = age > 60 ? true: (age++)>60;
System.out.println(success);
System.out.println("age:"+age);

8.4 逻辑运算符和位运算符区别

逻辑与或同按位与或是有一定区别的:

相同点是:都能参与逻辑运算,按位与或完全可以代替逻辑与或;

区别是:按位与或可以参与位运算,逻辑与或只能参与逻辑运算,逻辑与或可以“短路”,按位与或不能“短路”

短路运算

作用运算符:逻辑与&&,逻辑或||。

如(1):逻辑表达式:a>b && c>d

假设a>b 为false,c>d为true,那么整个表达式结果为false;

假设a>b 为false,c>d为false,那么整个表达式结果还为false;

可见,a>b的结果已经决定了整个表达式的结果,而后面的c>d并不影响表达式的结果,可以说后半部分被“短路”了。

如(2):逻辑表达式: a>b || c>d

假设a>b 为true,那么后半部分表达式将被“短路”;

java
int age = 60;
boolean success = true || (age++)>60;

System.out.println("success:"+success);
System.out.println("age:"+age);

8.3.7 instanceof 运算符

java
public class Operator6 {

    /**
     * instanceof
     * @param args
     */
    public static void main(String[] args) {

        String name = "jshand";
        System.out.println(name instanceof  String); //true
    }
}

8.5 运算符优先级

当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。

例如,(1+3)+(3+2)*2,这个表达式如果按加号最优先计算,答案就是 18,如果按照乘号最优先,答案则是 14。

再如,x = 7 + 3 * 2;这里x得到13,而不是20,因为乘法运算符比加法运算符有较高的优先级,所以先计算3 * 2得到6,然后再加7。

下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。

类别操作符关联性
后缀() [] . (点操作符)左到右
一元expr++ expr--从左到右
一元++expr --expr + - ~ !从右到左
乘性* /%左到右
加性+ -左到右
移位>> >>> <<左到右
关系> >= < <=左到右
相等== !=左到右
按位与左到右
按位异或^左到右
按位或|左到右
逻辑与&&左到右
逻辑或| |左到右
条件?:从右到左
赋值= + = - = * = / =%= >> = << =&= ^ = | =从右到左
逗号左到右

8.6 表达式

表达式是符合一定语法规则的运算符和运算数的序列。

  1. 算术表达式

    (x+y-12)*100

  2. 关系表达式

    x>y x>=y x!=y x==y

  3. 逻辑表达式

    x&&y x||y||z (!x)&&(!y)

  4. 赋值表达式

    x=y x+=y

表达式的值和类型

对表达式中操作数进行运算得到的结果称为表达式的值

表达式值的数据类型即为表达式的类型

表达式的运算顺序

应按照运算符的优先级从高到低的顺序进行

优先级相同的运算符按照事先约定的结合方向进行,例如:

从左向右(大部分): 2+3+4+5+6

从右向左:int a = 10;

8.7 数据类型转换规则

Java中可以进行不同数据类型的加减乘除运算。Java会将按照规则转换参与运算的数据类型。

  1. 自动类型转换(隐式类型转换)

    满足两个条件: ①两种类型彼此兼容 ②目标类型的取值范围要大于源类型

  2. 强制类型转换(显示类型转换)

当两种类型彼此不兼容, 或目标类型取值范围小于源类型

java
byte b = 10;

//数据类型的转换,从小范围数据向大范围类型放,可以直接转换,自动转换 自动转型
int i = b;

//大数据类型向小类型转换,可能损失数据,直接赋值不可以,可以强制转换
double d1 = 3.14;
i = (int)d1;

System.out.println("I:"+i);

8.9 练习

1、已知a,b均是整型变量,写出将a,b两个变量中的值互换的程序。(知识点:变量和运算符综合应用)

2、给定一个0~1000的整数,求各位数的和,例如345的结果是3+4+5=12注:分解数字既可以先除后模也可以先模后除(知识点:变量和运算符综合应用)

3、华氏温度和摄氏温度互相转换,从华氏度变成摄氏度你只要减去32,乘以5再除以9就行了,将摄氏度转成华氏度,直接乘以9,除以5,再加上32即行。

4、给定一个任意的大写字母A~Z,转换为小写字母。 (知识点:变量和运算符)

答案:

java

Released under the MIT License.