表达式中的陷阱(分析)
Posted 1906396809liufg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了表达式中的陷阱(分析)相关的知识,希望对你有一定的参考价值。
运算符:java中预定义的进行某种特殊运算符号
// + — && <<
表达式
1.表达式是一种运算符和操作数合成在一 起组成的式子
运算符需要的操作数数量不相同,a+b a*b a++ ?:
运算符需要的操作数类型别不相同 a+b A+1 1+1
2.表达式都有一个结果
习题:
(一)、
int a = 10;
int b = a+(a=5)+a+(a=10);
分析:
10+(a=5)+a+(a=10) a=10
10+5+a+(a=10) a=5
10+5+5+(a=10) a=10
10+5+5+10
最后:30
(二)、
int i = 1;
i = ( i = i + ( i + ( i = 2 ) + i ) = i ) + 3 +i
system.out.println(i);
分析 :
i = (i=i+(i+(i=2)+i)+i)+3+i
i=i+(i+(i=2)+i)+i
i+(i+(i=2)+i)+i
1+(i+(i=2)+i)+i i=1
i+(i=2)+i
1+(i=2)+i i=2
1+2+2
1 + 5 +2 i=8
最后:i=19
算数运算:
算数去处的运行原理
int a = 1, b=2,c=3
//a+b+c
//a+b+c*d
//a+b*c
System.out.println(a+b+c*d); 先运算 a+b 然后再运算c*d,再两数相加
题:
int a = 1 ;
int b= 2;
System.out.println((a=3)+(b=4)+a*b);
最后:19
分析 : 先运行3+4 然后a,b,的值改变了,赋值
3+4 + 3*4
最后:19
自增自减运算 ++ --
int i=1
System.out.println(i+++i+++i+++i++)
分析 :i++ + i++ + i++ + i++ i=1
1 + i++ + i++ + i++ i=2
1 + 2 + i++ + i++ i=3
1 + 2 + 3 + i++ i=4
1 + 2 + 3 + 4 i=4
最后:10
int i=1
System.out.println(i+++++i+i+++++i)
i++ + ++i + i++ + ++i i=1
1 + 3 + 3 + 5 12
///自动装箱封装类对象判定
integer a = 1 //integer a = 127 //integer a = 128
integer b = 1 //integer a = 127 //integer a = 128
//java自动装箱功能
//1.首先判断当前值的范围是不是在byte的表示范围内 -128 ~ +127
2.如果在此范围内,jvm会在内在中创建一个数组,该数组中有256个数
据是从,-128+127
//自动装箱的对象,保存在一个静态数组中
Integer[] nums = new Integer[256];
Integer a = 1;
Integer b = 1;
Integer c = 1;
//3.如果不在此范围内,每次均new Integer();
注意:计算机的基本操作单位是byte,不是int ,因为使用量太大,所有做成了
一个静态(内存消化?)
综合题:
byte b =1;
byte c= 1;
b= b+1; //int赋值到byte报错
c++;
system.out.println(b==c);
byte b=1;
byte c=1;
// b=b+1; //不通过
c++;
System.out.println(b==c);
byte b=1;
//1.jvm在进行定义的变量初始化时,首先检测右侧的数据自身的数据类型与
/*左侧的常量的数据类型之间是否存在有可转化的可能性
2.检测具有可转换性,检测左边的数据类型的范围-128+127
3.检测左侧数据的值是否在范围内
4.如果在范围内,自动将左侧的数据转型成左侧的类型
5.如果不在范围内,报错。
*
* */
三目运算:
int a = 10;
double d = 9.5;
启动开发者:int a>d ? a:d
jvm: double a>d ? a:d
system.out.println(a>d ? a:d)
三目运算是一个表达式,作为一个表达式,应该有一个结果
这个结果应该有一种唯一确定的数据类型
以上是关于表达式中的陷阱(分析)的主要内容,如果未能解决你的问题,请参考以下文章