标签:text 运算 条件跳转 部分 四种 条件 编译 ble str
代码从上到下从左到右依次执行
第一种形式:
if(逻辑值){
代码块...
}
第二种形式:
if(逻辑值){
代码块...
}else{
代码块...
}
第三种形式;
if(逻辑值){
代码块...
}else if(逻辑值){
代码块...
}//可以有零个或多个else if语句
else{//最后的else也可以省略
代码块...
}
逻辑值为true执行代码块
switch(选中的项){
case 选项1:代码块;break;
case 选项2:代码块;break;
...
default:代码块;break;
}
选项的值只能是byte、short、cahr、int四种类型,java1.7开始支持String类型和枚举类型
如果case之后没有break,那么从匹配的case开始依次往下执行.
如果每个case都有break,case之间的顺序不影响最后的结果.
程序最终都是一条条的指令,CPU有一个指令指示器,指向下一条要执行的指令,CPU根据指示器的指示加载指令并且执行。指令大部分是具体的操作和运算,在执行这些操作时,执行完一一个操作后,指令指示器会自动指向挨着的下一条指令。
但有一些特殊的指令,称为跳转指令,这些指令会修改指令指示器的值,让CPU跳到一个指定的地方执行。跳转有两种:一种是条件跳转;另一种是无条件跳转。条件跳转检查某个条件,满足则进行跳转,无条件跳转则是直接进行跳转。
if/else实际上会转换为这些跳转指令,比如下面的代码:
int a=10;
if(a%2==0)
{
System. out. println("偶数");
}
//其他代码
转换到的转移指令可能是:
int a=10;
条件跳转:如果a%2==0 ,跳转到第4行
无条件跳转:跳转到第7行
{
System. out. println("偶数");
}
//其他代码
或
int a=10 ;
条件跳转:如果a%2!=0, 跳转到第14行
{
System. out. pr intln("偶数" );
}
//其他代码
具体怎么转换和编译器的实现有关。在单一if的情况下可能不用无条件跳转指令,但稍微复杂一些的情况都需要。if、if/else、三元运算符都会转换为条件跳转和无条件跳转,但switch不太一样。
switch的转换和具体系统实现有关。如果分支比较少,可能会转换为跳转指令。如果分支比较多,使用条件跳转会进行很多次的比较运算,效率比较低,可能会使用一“种更为高效的方式,叫跳转表。跳转表是一个映射表,存储了可能的值以及要跳转到的地址,如下表所示:
条件值 | 跳转地址 |
---|---|
值1 | 代码块1的地址 |
... | ... |
值n | 代码块n的地址 |
跳转表为什么会更为高效呢?因为其中的值必须为整数,且按大小顺序排序。按大小排序的整数可以使用高效的二分查找。如果值是连续的,则跳转表还会进行特殊优化,优化为一个数组,连找都不用找了,值就是数组的下标索引,直接根据值就可以找到跳转的地址。即使值不是连续的,但数字比较密集,差的不多,编译器也可能会优化为一个数组型的跳转表,没有的值指向default分支。
程序源代码中的case值排列不要求是排序的,编译器会自动排序。之前说switch值的类型可以是byte、short、 int、 char、枚举和String。其中byte/short/int本来就是整数,char本质上也是整数,而枚举类型也有对应的整数,String用于switch时也会转换为整数。不可以使用long,为什么呢?跳转表值的存储空间一般为32位,容纳不下long。简单说明下String,String是通过hashCode方法转换为整数的,但不同String的hashCode可能相同,跳转后会再次根据String的内容进行比较判断。
三个条件:循环变量,循环条件,迭代语句
定义循环变量
while(判断循环变量){
代码块;
}
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int sum=0;
while(a>0){
sum+=a;
a--;
}
System.out.println(sum);
int b=1;
while(b<=500){
if (b%8==0) {
System.out.println(b+" ");
}
b++;
}
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int index=0;
while(a!=0){
index++;
a/=10;
}
System.out.println(index);
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int sum=0;
while(a!=0){
sum+=(a%10);
a/=10;
}
System.out.println(sum);
标签:text 运算 条件跳转 部分 四种 条件 编译 ble str
原文地址:https://www.cnblogs.com/ninety/p/9856515.html