变量与常量及运算符

变量(Variable):

  变量可以理解为可以改变的一个值。

  百度百科中这样说明变量:

    变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如Haskell)中,变量可能是不可变的。在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象。

  Java中的变量一般分为以下前两种(严格的讲分为三种):

    1.局部变量:指在方法或语句块内部定义的变量。

    2.实例变量(又叫“成员变量”或“全局变量”):指在方法外部,类的内部定义的变量。

    实例变量在使用前必须要先初始化(就是必须赋值),如果不初始化,则Java会自动的初始化为该类型的默认初始值(数值型:0或0.0、字符型:16位的0、布尔值:false)。

    3.类变量(被static修饰的变量):一般也称为静态变量,属于类。

    示例:

package com.lxj.cnblogs;

/**
 * 测试变量
 * @author 刘小将
 *
 */
public class TestVariable {
    boolean flag = false;    //这是一个全局变量
    static String str = "Abc";    //这是一个类变量
    public void function() {
        int a = 1;    //这是一个局部变量
    }
}

常量(Final):

  常量可以理解为是与变量相反的量,常量只能被初始化一次,其值是不可变的。

  常量由final修饰,一般声明常量时,常量名必须全大写。

  示例:

package com.lxj.cnblogs;

/**
 * 测试常量
 * @author 刘小将
 *
 */
public class TestFinal {
    
    final double PI = 3.14;        //这是一个常量
    
}

运算符:

  计算机的最基本用途之一就是执行数学运算,Java作为一种计算机语言,也提供了一套丰富的运算符来操纵变量与常量。

  运算符分以下几种:

    1.算术运算符:算数运算符用在数学表达式中,它们的作用和在数学中的作用一样。

      二元运算符:一般用在计算上(就和计算器计算数一样)

        +(加):加法运算

int a = 1;
int b = 2;
int count = a+b;    //加法运算

        -(减):减法运算

int a = 1;
int b = 2;
int count = b-a;    //减法运算

        *(乘):乘法运算

int a = 1;
int b = 2;
int count = a*b;    //乘法运算

        /(除):除法运算(注意:与数学中一样“0”不能作为除数)

int a = 1;
int b = 2;
double count = a/b;    //除法运算,因为1除以2为小数,所以用double来接收

        %(取余):取余的意思顾名思义也就是除过后的余数

int a = 4;
int b = 2;
int count = a%b;    //取余运算,4除2可以除尽,计算结果count为0

      一元运算符:一般用在循环语句中

        ++(自加运算):每走一次自身加一

        --(自减运算):每走一次自身减一

        (注:一元运算符有前后之分,如:a++,++a,a--,--a。当遇到一元运算符的计算时:“符号在前,表示先运算再赋值,符号在后,表示先赋值再计算”)

int a = 1;
int count = a++;    //a在前,所以count值为1
int compute = ++a;    //a在后,所以compute值为2

int b = 2;
int reckon = b--;   //b在前,所以reckon值为2 
int calculate = --b;    //b在后,所以calculate值为1

    2.关系运算符:关系运算符生成的是一个boolean类型的结果,一般用在判断语句中,它们的作用是运算两个对象值之间的关系,若关系是真的,则结果为true,否则为false。

      >(大于):检查符号左边的值是否大于右边的值

int a = 1;
int b = 2;
boolean count = a > b;    //a的值不大于b,所以count值为false

      <(小于):检查符号左边的值是否小于右边的值

int a = 1;
int b = 2;
boolean count = a < b;    //a的值小于b,所以count值为true

      >=(大于等于):检查符号左边的值是否大于或等于右边的值

int a = 3;
int b = 2;
boolean count = a >= b;    //a的值大于b,所以count值为true

      <=(小于等于):检查符号左边的值是否小于或等于右边的值

int a = 3;
int b = 2;
boolean count = a <= b;    //a的值不小于b,所以count值为false

      ==(等于):检查符号两侧的值是否相等

int a = 2;
int b = 2;
boolean count = a == b;    //a的值等于b,所以count值为true

      !=(不等于):检查符号两侧的值是否不相等

int a = 2;
int b = 2;
boolean count = a != b;    //a的值等于b,所以count值为false

    3.位运算符:位运算允许我们操作一个整数数据类型中的单个“比特”,也就是二进制位。位运算符会对两个自变量中对应的位执行布尔代数,并最终生成一个结果。

      ~(取反):翻转操作数的二进制的每一位,即0变为1,1变为0

      &(按位与):运算符两边的操作数的二进制的对应位的值都为1,则结果为1,否则为0

      |(按位或):运算符两边的操作数的二进制的对应位的值都为0,则结果为0,否则为1

      ^(按位异或):运算符两边的操作数的二进制的对应位的值相同,则结果为0,否则为1

      <<(按位左移运算符):左操作数按位左移右操作数指定的位数(后跟几,相当于乘以2的几次方)

      >>(按位右移运算符):左操作数按位右移右操作数指定的位数(后跟几,相当于除以2的几次方)

      >>>(按位右移补零操作符):左操作数的值按右操作数指定的位数右移,移动得到的空位以0填充

int a = 60;        //二进制:0011 1100
int b = 13;        //二进制:0000 1101
-----------------------------------
~a = -61;    //二进制:1100 0011
a & b = 12;    //二进制:0000 1100
a | b = 61;        //二进制:0011 1101
a ^ b = 49;    //二进制:0011 0001
a << 2 = 240;    //二进制:1111 0000
a >> 2 = 15;    //二进制:0000 1111
a >>> 2 = 15;    //二进制:0000 1111

    4.逻辑运算符: 逻辑运算符能生成一个布尔值(true/false),以自变量的逻辑关系为主。逻辑运算符一般用于连接boolean类型的表达式,可以理解为一般用于判断语句上,与C/C++不同,不可将一个非布尔值(0/1)当作布尔值在逻辑表达式中使用。

      &&(与/AND):逻辑与,当且仅当操作符两侧的操作数都为真(true)时,条件才为真(true)(可以理解为:当两边的值都相同时,结果为true,否则为false)

      ||(或/OR):逻辑或,如果操作符两侧任意一侧为真(true)时,条件为真(true)(可以理解为:当两边的值有一侧为true时,结果就为true,否则为false)

      !(非/NOT):逻辑非,用来反转操作数的逻辑状态,如果条件为true,则逻辑非将得到false(可以理解为:取反,值为false结果就为true,反之,值为true结果就为false)

      &(单“与”):与逻辑与相同,但是不会短路

      |(单“或”):与逻辑或相同,但是不会短路

      ^(异或):逻辑异或,只有两个操作数不同时才返回true,两个操作数相同时返回false

      短路与非短路:

        短路(&&||):当计算结果确定时,计算式不会继续往后计算直接输出结果。

        非短路(&|):当计算结果确定时,计算式会继续往后计算直至计算结束。

        当使用&&时,在操作符两侧的两个操作数都为true时,结果才返回true,但是当得到第一个false时,其结果就必定是false,此时就不会继续判断第二个操作数了。

        当使用&时,在操作符两侧的两个操作数都为true时,结果才返回true,但是当得到第一个false时,其结果就必定是false,此时还会继续判断第二个操作数。

        当使用||时,在操作符两侧的两个操作数都为false时,结果才返回false,但是当有任意一侧为true时,其结果就必定是true,此时就不会继续判断第二个操作数了。

        当使用|时,在操作符两侧的两个操作数都为false时,结果才返回false,但是当有任意一侧为true时,其结果就必定是true,此时还会继续判断第二个操作数。

  

        boolean a = true;
        boolean b = false;
        int e = 5;
        //短路与(&&)
        boolean count1 = a && b;    //结果为false
        boolean boo1 = (e < 4) && (e++ < 10);    //结果为false,计算结束后e的值为5
        //短路或(||)
        boolean count2 = a || b;    //结果为true
        boolean boo2 = (e > 4) || (++e < 10);    //结果为true,计算结束后e的值为5
        //逻辑非
        boolean count3 = !a;    //结果为false
        //非短路与(&)
        boolean boo3 = (e < 4) & (e++ < 10);    //结果为false,计算结束后e的值为6
        //非短路或(|)
        boolean boo4 = (e > 4) || (++e < 10);    //结果为true,计算结束后e的值为6
        //异或(^)
        boolean count4 = a ^ b;    //结果为true

    5.赋值运算符:赋值运算符使用=(等于号)进行的,它的意思是“取消符号右边的值,将右边的结果复制到符号左边”。右边的值可以是任何常量、变量、表达式,只要能产生一个值就可以,但符号左边必须是一个明确类型的、已命名的变量。

      =(赋值):赋值运算符,将符号右边的计算的结果值赋给左边的变量

      +=(和赋值):和赋值运算符,将符号左边的值与右边的加起来再赋给左边的变量

      -=(减赋值):减赋值运算符,将符号左边的值减去右边的值,再将结果赋给左边的变量

      *=(积赋值):积赋值运算符,将符号左边的值与右边的相乘再赋给左边的变量

      /=(商赋值):商赋值运算符,将符号左边的值除以右边的值,再将结果赋给左边的变量

      %=(取余赋值):取余赋值运算符,将符号左边的值除以右边的值,再将除后的余数赋给左边的变量

      <<=(左移赋值):左移赋值运算符,将左边的值的二进制数向左移动右边值个单位,再赋给左边的变量

      >>=(右移赋值):右移赋值运算符,将左边的值的二进制数向右移动右边值个单位,再赋给左边的变量

      &=(按位与赋值):按位与赋值运算符,将符号两边的值二进制比较,对应位的值都为1,则结果为1,否则为0,再将结果赋给左边的变量

      |=(按位或赋值):按位或赋值运算符,将符号两边的值二进制比较,对应位的值都为0,则结果为0,否则为1,再将结果赋给左边的变量

      ^=(按位异或赋值):按位异或赋值运算符,将符号两边的值二进制比较,对应位的值相同,则结果为0,否则为1,再将结果赋给左边的变量

        int a = 10;        //将10赋给a
        int b = 20;        //将20赋给b
        int c = 5;        //将5赋给c
        
        //和赋值(+=)
        a += b;        //等价于:a = a + b;
        //减赋值(-=)
        a -= b;        //等价于:a = a - b;
        //积赋值(*=)
        a *= b;        //等价于:a = a * b;
        //商赋值(/=)
        b /= a;        //等价于:b = b / a;
        //取余赋值(%=)
        b %= a;        //等价于:b = b % a;
        //左移赋值(<<=)
        c <<= 2;    //等价于:c = c << 2;
        //右移赋值(>>=)
        c >>= 2;    //等价于:c = c >> 2;
        //按位与赋值(&=)
        a &= b;        //等价于:a = a & b;
        //按位或赋值(|=)
        a |= b;        //等价于:a = a | b;
        //按位异或赋值(^=)
        a ^= b;        //等价于:a = a ^ b;

    6.三目运算符:三目运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋给变量(相当于简单的if语句)。

           当执行时布尔表达式先做判断,为真时则走表达式1,为假时走表达式2。

      表达式:

布尔表达式 ? 表达式1 : 表达式2;

      示例:

        int a = 10;
        int b = 5;
        int c = (a > b) ? (a - b) : (a + b);    //先判断a是否大于b,如果大于则a-b,否则a+b

    

      使用三目运算符实现:输入一个年份,判断该年份是平年或闰年:

package com.lxj.cnblogs;
import java.util.Scanner;

/**
 * @author 刘小将
 * if语句
 * 判断年份是闰年还是平年
 */
public class JudgeYear {
    
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);        //创建Scanner对象实现控制台输入
        System.out.println("请输入一个年份:");
        long year = scan.nextLong();        //控制台输入
        boolean isLeapYear = (year % 4 ==0 && year % 100 !=0) || year%400 ==0;
        String string = isLeapYear?year+"是闰年":year+"是平年";
        System.out.println(string);
    }
}

        7.字符串连接符:在定义字符串或输出字符串时,难免会遇到多个字符串拼接的问题,这时候就需要字符串连接符来拼接字符串。

            字符串连接符(+)两侧的操作数只要有一个是字符串(String类型),则系统会自动将另一个操作数转化为字符型,并连接。

      示例:

public class TestDemo{
  public static void main(String[] args){    
      System.out.println("Hellow"+"World");    //使用字符串连接符连接两个字符串并在控制台输出
  }  
}

    

    8.instanceof关键字:用在if语句中,一般用来判断一个对象是否是此类型的对象,返回值为boolean类型。

      语法:

if(对象名 instanceof 类名){
    强制转换并调用
}

      示例:

public class TestDemo{
    public static void main(String[] args){
        if(stu instanceof Student){    //判断stu是否是Student类型的
            代码体
        }
    }
}
原文地址:https://www.cnblogs.com/joyfulcode/p/12078522.html