说说三元运算和if...else的相同之处?
都是判断语句
什么是java三元运算符呢?无疑其操作元有三个,第一个是条件表达式,剩余两个为值,条件表达式为真时运算取第一个值,为假时取第二个值。
其示例代码如下:boolean a = 20 < 45 ? true : false;三元运算符的优先级高于赋值运算符,故判断表达式值为真,去第一个true,a的值为true。
三元运算符用于判断,其等价的if-else语句如下所示:
01 boolean a; //声明boolean变量
02 if(20<45) //将20<45作为判断条件
03 a = true; //条件成立将true赋值给a
04 else
05 a = false;
很多时候三元运算符可以和if-else语句进行互换,它们两个可以等价的实现判断的效果。但是三元运算符与if-else语句也还是有不同之处的,下面来具体的谈谈不同之处。
第一,两者之间对于返回值有不同的要求,三元运算符是必须要有返回值要求,其运算后一定会有一个结果返回供程序开发人员使用;而if-else语句并不一定有返回值,其执行结果可能是赋值语句或者打印输出语句(相信这一点大家都比较好理解)。
第二,两者的性能不同,三元运算符的运算性能相对于if-else语句来说要高一些,但是在一些小型的applet开发和日常学习开发中可以忽略不计。
第三,两者使用范围不同,在ireport的一些动态执行的情况下,只能用三元运算符而不能用if-else语句,当然在大多数情况下两者是可以等价互换的。
第四,两者的语言特性不同,三元运算符涉及到一种成为双目数值提升(binary numeric promotion)的语言特性。所谓的双目数值提升,在三目运算符java开发的环境下可以简单的理解为双目运算符的类型转换问题(便于理解)。其具体规则总结如下:
1)如果定义了数据类型的变量与未定义变量的数值共同参与三元运算符的后双目运算,,那么返回的结果就是范围大(精度高)类型
2)如果两个定义了数据类型的变量共同参与三元运算符的后双目运算,那么返回的结果就是范围大(精度高)类型
3)如果直接进行数值的比较,会自动转型成为范围大(精度高)的数据类型
而jvm在给数值分配数据类型的时候会选取刚好能装下该数据大小精度的数据类型进行分配(99.0为float,99为byte/short),在java中常见数据类型其范围从小到大(精度由高到低):byte
01 char a=‘a‘;
02 int i=96;
03 //规则1,定义了数据类型的变量与未定义变量的数值,结果自动转换为精度高的
04 System.out.println(2==2?i:9.0);
05 //jvm给数值分配的数据类型,98并不是int类型的,而是byte/short,故结果会变为ASCII码98
06 //对应的字符
07 System.out.println(2==2?98:a);
08 //规则2,两个已经定义数据类型的变量,结果自动转换为精度高的
09 System.out.println(2==2?a:i);
10 //规则3,两个未定义的数值,结果自动转换为精度高的
11 System.out.println(2==2?99:9.0);
12 System.out.println(2==2?99:‘b‘);
上述代码的执行结果为: 96.0
b
97
99.0
c
大家可以参阅上述代码与结果理解三元运算符的双目数值提升问题,由于本人水平有限,希望此文能给大家带来一定的帮助和启示,也希望各位不吝赐教,提出你们的宝贵建议。
Switch语句的条件只能接受什么类型的值?
switch语句可以接受 int ,String ,Enum ,char类型。
1 package myeclipseFiles2; 2 //枚举 3 public enum Day { 4 Sunday,Monday; 5 }
1 package myeclipseFiles2; 2 3 public class Switch { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 int day=3; 8 /*switch语句中可以匹配int整型*/ 9 switch(day){ 10 case 1: 11 System.out.println("今天星期一"); 12 break; 13 case 3: 14 System.out.println("今天星期三"); 15 break; 16 default: 17 System.out.println("输入错误"); 18 break; 19 } 20 21 /*switch语句中可以匹配String*/ 22 String string="23333"; 23 switch(string){ 24 case "23333": 25 System.out.println("哈哈哈"); 26 break; 27 case "66666": 28 System.out.println("厉害了呀"); 29 break; 30 default: 31 System.out.println("输入错误"); 32 break; 33 } 34 35 /*switch语句中可以匹配枚举类型*/ 36 Day day2 = Day.Monday; 37 switch(day2){ 38 case Monday: 39 System.out.println("今天星期一"); 40 break; 41 } 42 43 /*switch语句中可以匹配char类型:char类型可以根据ASICC码转换*/ 44 char char1='a'; 45 switch(char1){ 46 case 'a': 47 System.out.println("这是a"); 48 break; 49 default: 50 System.out.println("输入错误"); 51 break; 52 } 53 54 } 55 56 }
说说do...while和while的区别?
while和do…while语句都是循环语句,功能都差不多,唯一的区别在于检验条件的时间上。while语句在进入循环体之前要先判断条件是否成立,如果成立的话则进入循环体。
而do…while语句则相反,是先执行循环体,然后再判断条件是否成立,如果成立的话则继续循环体,如果不成立则跳出循环,也就是说对于do…while语句,不管条件是否成立都要先执行一遍。
while和do-while的使用方法
一、while语句的一般形式为:
while(表达式)语句
其中表达式是循环条件,语句为循环体。
while语句的语义是:计算表达式的值,当值为真(非0)时,
执行循环体语句。
二、do-while语句的一般形式为:
do
语句
while(表达式);
这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真,
如果为真则继续循环;如果为假, 则终止循环。因此,
do-while循环至少要执行一次循环语句。
使用while语句应注意以下几点:
1、while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为真(非0)即可继续循环。
2、循环体如包括有一个以上的语句,则必须用{}括起来,组成复合语句。
说说for循环的两种写法?
第一种写法 传统的方法,遍历数组
String[] arr = { "amy", "heinrich", "cindy", "git" }; for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } 打印台 amy heinrich cindy git
这种方式最简单,对数组还有集合都可以
第二种 而对于遍历Collection对象,这个循环则通常是采用这样的形式
String[] arr = { "amy", "heinrich", "cindy", "git" }; List<String> list = Arrays.asList(arr); for (Iterator<String> iterator = list.iterator();iterator.hasNext();) { System.out.println(iterator.next()); } 控制台信息 amy heinrich cindy git
第三种方法也很常见
不严格的说,Java的第三种for循环基本是这样的格式:
for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体
借助这种语法,遍历一个数组的操作就可以采取这样的写法:
String[] arr = { "amy", "heinrich", "cindy", "git" }; for (String a : arr) { System.out.println(a); } 控制台 amy heinrich cindy git
来源:https://www.cnblogs.com/lszw/p/11428627.html