表达式中的陷阱(分析)

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)
三目运算是一个表达式,作为一个表达式,应该有一个结果
这个结果应该有一种唯一确定的数据类型

 

以上是关于表达式中的陷阱(分析)的主要内容,如果未能解决你的问题,请参考以下文章

记录一个Java三元表达式中的陷阱

c++的lambda使用注意事项,可能导致的崩溃问题分析

c++的lambda使用注意事项,可能导致的崩溃问题分析

Java表达式的陷阱——输入法注释字符和转义字符的陷阱

C陷阱与缺陷----语法陷阱

正则表达式的陷阱