Java 3:变量、运算符(优先级)

变量

Java中不区分变量的声明和定义, 不可以使用未初始化的变量
int i,j=0;//这样只有j赋值,i并没有初始化


final常量

final常量的声明和赋值可以分开,类中的final变量可以在构造函数中定义,但是 不能在构造函数结束后还没有赋值
fianl只能被赋值一次,习惯上使用全大写
class A{
  final int a;
  A(){
      a=1;
  }
}//正确
class A{
  final int a=1;
  A(){}
}正确
class A{
   public static void aaa(){
      final int v;
   }
}//作为局部变量,正确,只要不操作v,就不报错
class A{
   final int a=1;
   A(){
      a=1;
   }
}//错误,一旦定义,不能再对常量赋值



一个类的变量声明为public,则其他类的方法可以直接使用(对象名.变量名,如果是static变量,可以类名.变量名)

运算符

整数除以0,报错
浮点数除以0,得到无穷大(Infinity)或NaN

&&、||采用短路方法,第二个操作数可以不计算
&、| 也可以应用于布尔运算,但是不短路

位运算符
包括:&、|、^、~

^会将符号位也考虑在内
~0b100=-5(取反时包括符号位一起取反,然后当做补码计算真值)

取得一个整数的每一位
public static void main(String[] args) {
	int a=0b110011;
	for(int i=6;i>0;i--){
		System.out.print(judge(a,i));
	}
}
public static int judge(int number,int wei){
	int s=1<<(wei-1);//左移,左移一位相当于乘以2
	int result=(number&s)/s;//需要判别的一位不变,其余置0,再将这一位移到最右位		
	return result;
}

byte a=(byte) 0b00110011;
byte b=(byte) 0b10000011;
System.out.println(a&b);//符号位也要与一下,或一下

<<左移,左移时右端填充0,不影响符号位
>>右移,用符号位填充高位,移2位就前面加两个符号位
>>>右移,用0填充高位
移位运算右侧参数需要模32(除了long是模64),就是说对于int或short,移位33=移位1
移位运算不能对浮点数进行
byte a=(byte) 0b00001111;//正数,>>和>>>一样
System.out.println(a>>>1);
System.out.println(a>>1);//都输出7
byte a=(byte) 0b10001111;//负数
System.out.println(a>>>1);//2147483591 ??
System.out.println(a>>1);-(0111000+1)=-57
//所以,>>填充符号位反倒好算,>>>怎么弄的

short a= -0b111;//-7(先计算0b111=7,然后加的负号)    补码是:符号:1  中间全1 最后001	1 1..1 001
System.out.println(a>>>1);1 1...1 00 取反:1 0..0 11 加1=-100=-4
System.out.println(a>>1);//2147483644,看来负数不能随便移动
System.out.println(a>>2);//1 1...1 0 取反 1 0...0 1 加1=-10=-2

优先级

a+=b+=c 等价于 a+=(b+=c),因为+=是右结合运算符

[ ]  .  (方法调用) 
! ~ ++ -- +-(正负号)()(强转)new从右向左
* / % 
+ - 
<< >> >>> 
< <= > >= instanceof 
== != 
& 
^ 
| 
&& 
|| 
?:从右向左
= += -= *= %=&=^=<<=>>=从右向左
int a=0b1;	
System.out.println(a<<1+1);//输出100=4,+优先级更高

数学运算符的优先级大于逻辑
一元操作符优先级比较大



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值