1-------java表达式的值的左边值:
a=3; 此赋值表达式的值为3;
计算长串表达式的值的时候,注意从左往右计算。例如
public static void main(String[] args) {
// TODO Auto-generated method stub
int a=1;
//int b=a+(a=2)+a+(a=3);
int k=(a=a+(a+(a=2)+a)+a)+3;
System.out.println(a);
//System.out.println(b);
System.out.println(k);
}
//输出8,11.注意a的值经常改变
2,算术表达式
int a=1;
int b=2;
int c=3;
System.out.println(a+b+c);
//1,找a,2读+,3,找b同时读取后面+判断优先级。4进行运算计算结果和a相加
int i=1;
int j=2;
int k=(i=3)+(j=4)+i*j;
System.out.println(k);
//结果输出19,前面的赋值语句先执行,之后的i*j语句执行的时候数据改变了。
//a%b式子中,由a的符号决定结果的符号,两个数的绝对值提供结果的。
//判断奇数和偶数,不能判断对于1的问题
public static boolean isOdd(int i){
return i % 2 != 0;
}
3,i++和++i运算符
int i=1;
System.out.println(i+++i+++i++);
//6
int i=1;
System.out.println(i++ + ++i+i++ + ++i);
//12
输出结果 6 拆分的时候从后往前拆分。即 i++ + i++ + i++ = 1+2+3=6.
++必须是一个变量。
4,关系运算符 ==
int a=10;
int b=10;
double c=10.0;
//左边右边类型一致,直接比较
System.out.println(a==b);
//先将a的值提升为double类型,再比较
System.out.println(a==c);
所以两个都是true
5,小数问题,和int类型赋值给byte类型会报错,因为会损失精读:
5;逻辑表达式 &的优先级高于|
所以 true|flase&false 的结果是true
6:三目运算符;
int a=10;
double b=5.0;
System.out.println(a>b?a:b);
首先会类型转换。转化成double,三目运算表达式的值是 10.0
//int类型和boolean类型 只能转化为原始object类型 所以转化为obj类型了。
System.out.println(3>2?1:true);
Object obj=3>2?1:true;
System.out.println(obj);
7:注意赋值表达式:
short i=1;
//第一个表达式会报错,因为int不能赋值给int类型。直接编译不能通过了
i=i+1;
//第二个运算后的结果和左边的类型一致,所以它还是short类型。
i+=1;
8:注意赋值运算符是优先级最低的;
int i=0;
for(int j=0;j<10;j++){
i=i++;
}
System.out.println(i);
//输出的结果还是0