Java基础——表达式

 表达式

  表达式由操作数和运算符组成,对操作数进行运算符指定的操作,并得出运算结果。
  Java运算符按功能可分为:
算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符,除此之外,还有几个特殊用途的运算符,如数组下标运算符等。操作数可以是变量、常量或方法调用等。

  操作数——常量


  常量操作数很简单,只有简单数据类型和String类型才有相应的常量形式。
  例如:

常量

含义

23.59

double型常量

-1247.1f

float型常量

true

boolean型常量

“This is a String”

String型常量

‘a’

char型常量

  •   变量的声明及初始化
      
    变量是存储数据的基本单元,它可以用作表达式中的操作数。变量在使用之前要先声明。变量声明的基本格式为:
      类型 变量名1 [=初值1] [,变量名2 [=初值2]]....;
      其中,类型是变量所属的类型,既可以是简单数据类型,如int和float等,又可以是类类型。有时也把类类型的变量称为引用。方括号中的初值是可选的。如果没有,则表明仅是声明了一个变量,否则是在声明变量的同时,给变量赋了初值,称为对变量进行了初始化。声明变量的地方有两处,一处是在方法内,另一处是在类定义内。
    方法内定义的变量称为自动变量,也称为局部变量、临时变量或栈变量。这里所说的方法,包括程序员定义的各个方法。类中定义的变量就是类的成员变量  
  • 默认初始值  

  • 简单数据类型的变量在说明之后,系统自动在内存分配相应的存储空间。说明引用后,系统只分配引用空间,程序员要调用new来创建对象实例,然后才分配相应的存储空间。Java程序中不允许将未经初始化的变量用作操作数。对于自动变量,如果变量声明时没有进行初始化,则在变量使用之前必须使用赋值语句进行赋值。如果编译器发现某个变量没有初始化,编译时会出现错误。创建一个对象引用后,需要使用new运算符为其分配存储空间。对于其中的成员变量,程序员可以显式进行初始化,也可以由系统自动进行初始化。

类型

初始值

类型

初始值

byte

(byte)0

double

0.0

short

(short)0

char

‘\u0000’(null)

int

0

boolean

false

long

0L

所有引用类型

null

float

0.0f

 

 

  •   初始值错误示例
      

      因为b没有初始化,没有赋初始值,所以程序报错。
  •   变量定义错误示例
      

      因为name在主方法中已经定义,方法中定义的变量作用于整个方法,同时覆盖了同名的类变量也叫成员变量。
  •   数学函数


  •   进行科学计算时,可能会经常用到数学函数,数学函数往往得到一个数值结果,这也属于操作数。Java语言提供了数学函数类Math,其中包含了常用的数学函数。

Math.sin(0)

正弦函数,返回0.0,这是double类型的值

Math.cos(0)

余弦函数,返回1.0

Math.round(6.6)

四舍五入取整,返回7

Math.sqrt(144)

开平方函数,返回12.0

Math.pow(5,2)

计算乘方,返回25.0

Math.max(560,289)

求最大值函数,返回560

Math.min(560,289)

求最小值函数,返回289

Math.random()

返回0.0~1.0之间双精度的一个随机数值

  •   运算符

算术
运算符

算术运算符包括通常的加(+)、减(-)、乘(*)、除(/)、取模(%),(++),(--)加1减1运算符完成整型和浮点型数据的算术运算。许多语言中的取模运算只能用于整型数,Java对此有所扩展,它允许对浮点数进行取模操作。例如,3%2的结果是1,15.2%5的结果是0.2。取模操作还可以用于负数,结果的符号与第一个操作数的符号相同,例如,5%-3的结果是2,-5%-3的结果是-2,-5%3的结果是-2。

关系
运算符

关系运算符用来比较两个值,包括大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(==)和不等于(!=)6种。关系运算符都是二元运算符,也就是每个运算符都带有两个操作数。运算的结果是一个逻辑值。Java允许“==”和“!=”两种运算用于任何数据类型。

  •   自增运算符


  •   int a = 5;
      int j = a++;
      int k = ++a;
      System.out.println(j); //j的值为5
      System.out.println(k);//k的值为7
      
    a++ 先赋值再++
      ++a 先++再赋值
  •   逻辑运算符

  •   &&:true&&true表达式全部为真时执行程序
      ||:true||false表示有一个为真时执行程序
      !:非

逻辑
运算符

逻辑运算符包括逻辑与(&&)、逻辑或(||)和逻辑非(!)。前两个是二元运算符,后一个是一元运算符。Java对逻辑与和逻辑或提供“短路”操作功能。进行运算时,先计算运算符左侧表达式的值,如果使用该值能得到整个表达式的值,则跳过运算符右侧表达式的计算,否则计算运算符右侧表达式,并得到整个表达式的值。

  •   短路
      

      *因为a>b为false,所以发生短路,跳过第二个表达式
  •   运算符
  •   
  • 位运算符

位运算符

位运算符用来对二进制位进行操作,包括按位取反(~)、按位与(&)、按位或(|)、异或(^)、右移(>>)、左移(<<)及无符号右移(>>>)。位运算符只能对整型和字符型数据进行操作

  •   :如果两个相应的二进制形式的对应的位数都为1,则结果为1,记为同1为1,否则为0,转换为2进制数计算
      

      00000100 4
      00000101 5
      00000100 4
      

      除2没余数记0有余数记1,最后除尽的一位记1
  •   & :如果两个数为负数,先求补码再进行运算
      补码:反码+1等补码
      反码:除符号位,按位取反
      

      
  •   | :有1为1,否则为0
      

      
  •   | :有1为1,否则为0,计算负数时,结果符号为1需要进行逆操作转为源码输出结果
      比如:-4|5
      
  •   ^:相同为0,不同为1
      

      
  •   移位运算符

  •   左移:右边空出的位用0填补高位左移溢出则舍弃该高位。计算机中常用补码表示数据,注,用补码计算
      

      00001000 8
      00100000 32整体左移后
      10001000 -8
      11110111 -8的反码
      11111000 -8的补码
      11100000 整体左移后
      11011111 逆运算,-1得反码
      10100000 按位取反最后结果-32

移位运算符

右移(>>)、左移(<<)及无符号右移(>>>)。

  •   右移:左边空出的位用0或者1填补。正数用0填补,负数用1填补。注:不同的环境填补方式可能不同;低位右移溢出则舍弃该位。
      

      00001000 8
      00000010 2整体右移后
      10001000 -8
      11110111 -8的反码
      11111000 -8的补码
      11111110 整体右移后
      11111101 逆运算,-1得反码
      10000010 按位取反最后结果-2
  •   无符号右移:正数与右移规则一样,负数的无符号右移,就是相应的补码移位所得,在高位补0即可
      

      10000000000000000000000000001000  -8
      11111111111111111111111111110111  -8的反码
      11111111111111111111111111111000  -8的补码
      00111111111111111111111111111110  无符号移两位,不取原码,直接输出
  •   int x=3;
      x=x*3;
      等价于
      int x=3;
      x*=3;
      运算符的优先顺序结合实例在以后的程序讲

其他运算符

Java中的运算符还包括扩展赋值运算符(+=、-=、*=、/=、%=、&=、|=、^=、>>=、<<=和>>>=)、条件运算符(?:)、点运算符(.)、实例运算符(instanceof)、new运算符及数组下标运算符([])等。扩展赋值运算符是在赋值号(=)前再加上其他运算符,是对表达式的一种简写形式,。

  •   类型转换

  •   Java是一种强类型语言,不支持变量类型间的自动任意转换,有时必须显式地进行变量类型的转换。每个数据都与特定的类型相关,允许整型、浮点型、字符型数据进行混合运算。运算时,不同类型的数据先转换为同一种类型,然后再进行运算。转换的一般原则是位数少的类型转换为位数多的类型,这称作自动类型转换这样做的目的是保证转换时不丢失有用信息。

操作数之一类型

操作数之二类型

转换后的类型

byte或short

int

int

byte或short或int

long

long

byte或short或int或long

float

float

byte或short或int或long或float

double

double

char

int

int

  •   类型转换示例
      

      *两个操作数,级别低的会自动类型转换成级别高的,这是自动类型转换
      当级别(精度)变低时,则需要强转,这是强制类型转换

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值