1-------java表达式的值的左边值:java
a=3; 此赋值表达式的值为3;code
计算长串表达式的值的时候,注意从左往右计算。例如编译
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,算术表达式class
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.object
++必须是一个变量。im
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类型会报错,由于会损失精读:static
5;逻辑表达式 &的优先级高于|img
因此 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