精华内容
下载资源
问答
  • 但在使用时,条件表达式返回的类型需要留意,特别是在第二、第三运算符涉及到基本数据类型装箱、拆箱与数值类型提升时。 一、案例 下面一段代码想要执行的操作是:将系统的价格数字转换为通用的价格,如果show...

    条件表达式在编程中经常被用到,如 a=b?x:y 简单的一行语句,就能替换一个 if else 语句块,所以非常受欢迎。但在使用时,对条件表达式返回的类型需要留意,特别是在第二、第三运算符涉及到基本数据类型装箱、拆箱与数值类型提升时

    一、案例

    下面一段代码想要执行的操作是:将系统的价格数字转换为通用的价格,如果showDecimal为true,显示小数点后的数字,否则不显示小数点。

    private static void transPrice(long price, boolean showDecimal) {
        Float formatPrice = price/10000F;
        Object data = showDecimal ? formatPrice : formatPrice.intValue();
        System.out.println(data.toString());
    }
    transPrice(135000, true); //期待输入结果: 13.5
    transPrice(0, false); //期待结果: 0

    调用该方法后,预期输出 0,实际得到 0.0。也即黑体字一行并未达到预期要的结果。反编译该段代码后,如下:

    Object data = Float.valueOf(showDecimal?formatPrice.floatValue():(float)formatPrice.intValue());

    看完这段代码后,我们大致可以知道出现该结果的原因,但是编译器为何会将这段代码这样处理呢?

    二、案例分析

    根据 Java 语言规范 jls-15.25 (JDK8)的描述

    The process for determining the type of a conditional expression depends on the kind of conditional expression, as outlined in the following sections.

    The following tables summarize the rules above by giving the type of a conditional expression for all possible types of its second and third operands. bnp(..) means to apply binary numeric promotion.

    Table 15.25-A. Conditional expression type (Primitive 3rd operand, Part I)

    3rd byteshortcharint
    2nd         
    float bnp(float,byte) bnp(float,short) bnp(float,char) bnp(float,int)
    Float bnp(Float,byte) bnp(Float,short) bnp(Float,char) bnp(Float,int)
    double bnp(double,byte) bnp(double,short) bnp(double,char) bnp(double,int)

     

    也就是说:当条件表达式的第二运算符是 Float 引用类型、第三运算符是 int 基本数据类型时,需要对第二、第三运算符进行双目数值类型提升(binary numeric promotion)

    该操作的结果是:

    1.第二运算符是引用 Float 引用类型,对其进行拆箱操作,第二运算符调用 formatPrice.floatValue()

    2.第二运算符现在是 float 类型,第三运算符是 int 类型,因此将第三运算符也转换成 float 类型,于是有 (float)formatPrice.intValue()

    最后,在赋值给 data 时,需要将 float 类型的数据装箱为 Float.valueOf(...)

    三、解决方案

    使用 if else 语句

    Float formatPrice = price/10000F;
    Object data;
    if (hasDecimal) {
    priceNum
    = formatPrice; } else { priceNum = formatPrice.intValue(); }

    这样,就保证了 int 不会被提升为 float 类型。

    当然,本例稍微有点特殊。一般情况下使用条件表达式,只需要得到一个类型的结果。此处只是借此来分析条件表达式对于第二、第三运算符类型的处理。

     

    参考文档:

    JDK 8规范文档:http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25

    转载于:https://www.cnblogs.com/ethanzhong/p/7089252.html

    展开全文
  • C#中的if语句

    2012-10-19 10:28:15
    if语句的使用方法: if (condition) *这里condition可以是一个bool类型的值,也可以是最终值为bool类型的表达式。 statements ; *statements是如果condition为真是需要执行语句,如果不为真则跳过这段语句...

    if语句的使用方法:

    1. if (condition)   *这里的condition可以是一个bool类型的值,也可以是最终值为bool类型的表达式。
      statements ;    *statements是如果condition为真是需要执行的语句,如果不为真则跳过这段语句向后执行。
    2. statements 如果是一条语句则不需要在statements的起始位置添加一对"{}",如果statements为多条语句则必须使用"{}"将这段语句括起来。
    eg: IfDemo.cs
    using System;
    
    namespace IfDemo
    {
    	class Program
    	{
    		static void Main()
    		{
    			Console.WriteLine("Please input a string:");
    			string input = Console.ReadLine();
    			
    			if(input == "")
    			{
    				Console.WriteLine("You typed in an empty string!");
    				return ;
    			} else if(input.Length < 10)   //这里的 else if 可以根据需要添加多个
    			{
    				Console.WriteLine("The string had less than 10 characters.");
    			} else if(input.Length < 10)
    			{
    				Console.WriteLine("The string had at least 10 but less than 20 characters.");
    			}else {            //这里的else 只能有一个
    				Console.WriteLine("The string had more than 20 characters.");
    			}
    			
    			Console.WriteLine("The string was {0}",input);
    			
    			Console.ReadKey();
    		}
    	}
    }



    展开全文
  • Java if判断语句用法详解if...}功能说明if是该语句中的关键字,后续紧跟一对小括号,该小括号任何时候不能省略,小括号内部是具体条件,语法上要求该表达式结果为boolean类型。后续为功能代码,也就是当条...

    Java if判断语句用法详解

    if关键字中文意思是如果,其细致的语法归纳来说总共有三种:if语句、if-else语句和if-else if-else语句,下面重点介绍if语句。

    if语句

    语法

    if(条件表达式){

    功能代码块;

    }

    功能说明

    if是该语句中的关键字,后续紧跟一对小括号,该对小括号任何时候不能省略,小括号的内部是具体的条件,语法上要求该表达式结果为boolean类型。后续为功能的代码,也就是当条件成立时执行的代码,在程序书写时,一般为了直观的表达包含关系,功能代码一般需要缩进。if语句需要特别注意的是:

    1、 这里的功能代码只能是一行,关于多行结构的功能代码,后续将说明。

    2、 if(条件表达式)后续一般不书写分号if语句的执行流程为:如果条件表达式成立,则执行功能代码,如果条件表达式不成立,则不执行后续的功能代码。

    例子

    int a = 10;

    if(a >= 0)

    System.out.println(“a是正数”);

    if( a % 2 == 0)

    System.out.println(“a是偶数”);

    在该示例代码中,第一个条件是判断变量a的值是否大于等于零,如果该条件成立则执行输出,第二个条件是判断变量a是否为偶数,如果成立也输出。

    多个if语句

    if(条件1)

    功能代码1;

    if(条件2)

    功能代码2;

    else

    功能代码3;

    则这里的else语句和条件2对应的if语句匹配,前面的条件1是一个独立的语句。在实际代码中,可以使用大括号使整个程序的结构更加清楚。

    对于if-else语句来说,因为if的条件和else的条件是互斥的,所以在实际执行中,只有一个语句中的功能代码会得到执行。

    例子

    if语句例子

    package basis.day02; import java.util.Scanner; /**

    * 流程控制:顺序结构(程序顺序执行),分支结构(if-else,switch-case),

    * 循环结构(while,do……while,for)

    *@author LENOVO

    *

    */ public class TestIf_01 { /*

    * if-else语句:在程序执行过程中一定有一个语句执行,并且只有一条语句执行

    * if(条件表达式){}else{} if(条件表达式){}else if(条件表达式){}else{}

    * 如果各个条件之间是“互斥”关系,语句是自由的。

    * 如果各个条件之间有“包含”关系,范围大的要放在范围小的后边。

    */ public static void main(String[] args){ /*

    *从键盘读入小明的成绩

    */ Scanner sc = new Scanner(System.in);

    System.out.println("请输入小明的期末成绩:"); int score = sc.nextInt(); /*

    * 依据不同的条件输出不同的结果

    */ if(score == 100){

    System.out.println("小明的奖励是:BMW车一辆");

    }else if(score > 80){

    System.out.println("小明的奖励是:iphone6s一台");

    }else if(score >= 60){

    System.out.println("小明的奖励是:参考书一本");

    }else{

    System.out.println("继续努力!");

    }

    }

    }

    版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。

    展开全文
  • shell中if语句的使用&&逻辑判断 转自:https://blog.51cto.com/lovelace/1211353 < 希望你有所帮助 > bash如何实现条件判断? 条件测试类型: 整数测试 字符测试 文件测试 一、条件测试的表达式:...

    shell中if语句的使用&&逻辑判断

    转自:https://blog.51cto.com/lovelace/1211353
    < 希望对你有所帮助 >

    bash中如何实现条件判断?
    条件测试类型:
    整数测试
    字符测试
    文件测试

    一、条件测试的表达式:
    [ expression ] 括号两端必须要有空格
    [[ expression ]] 括号两端必须要有空格
    test expression
    组合测试条件:
    -a: and
    -o: or
    !: 非

    二、整数比较:
    -eq 测试两个整数是否相等
    -ne 测试两个整数是否不等
    -gt 测试一个数是否大于另一个数
    -lt 测试一个数是否小于另一个数
    -ge 大于或等于
    -le 小于或等于

    命令间的逻辑关系
    逻辑与:&&
    第一个条件为假 第二个条件不用在判断,最总结果已经有
    第一个条件为真,第二个条件必须得判断
    逻辑或:||

    三、字符串比较
    字符串比较:
    == 等于 两边要有空格
    != 不等
    > 大于
    < 小于
    四、文件测试

     -z string 测试指定字符是否为空,空着真,非空为假
     -n string 测试指定字符串是否为不空,空为假 非空为真
    -e FILE 测试文件是否存在
    -f file 测试文件是否为普通文件
    -d file 测试指定路径是否为目录
    -r file 测试文件对当前用户是否可读
    -w file 测试文件对当前用户是否可写
    -x file 测试文件对当前用户是都可执行
    -z  是否为空  为空则为真
    -a  是否不空
    

    五、if语法

    if 判断条件 0为真 其他都为假

    单分支if语句
    if 判断条件;then
    statement1
    statement2

    fi

    双分支的if语句:
    if 判断条件;then
    statement1
    statement2

    else
    statement3
    statement4
    fi

    Note:
    if语句进行判断是否为空
    [ “name=""][!"name” = "" ] 等同于 [ ! "name” ]
    [ -z “$name” ]

    Note:
    使用if语句的时候进行判断如果是进行数值类的 ,建议使用 let(())进行判断
    对于字符串等使用test[ ] or [[ ]] 进行判断
    (())中变量是可以不使用$来引用的

    example:表述数字范围的时候 可以使用if可以是使用case
    if [ $x -gt 90 -o $x -lt 100 ]
    case $x in
    100)
    9[0-9])

    if [ "Xname"!="x"]name" != "x" ] 这个语句的意思是如果name为空,那么X=X成立折执行下面的结果;

    写脚本的时候很多时候需要用到回传命令,$?如果上一个命令执行成功,回传值为0,否则为1~255之间的任何一个
    0为真
    非0为假

    条件测试的写法:

    1、 执行一个命令的结果
    if grep -q “rm” fs.sh;then

    2、传回一个命令执行结果的相反值
    if !grep -q “rm” fs.sh;then

    3、使用复合命令((算式))
    if ((a>b));then

    4、使用bash关键字 [[判断式]]
    if [[ str > xyz ]];then

    5、使用内置命令:test 判断式
    if test “str” > “xyz”;then

    6、使用内置命令:[判断式] 类似test
    if [ “str” > “xyz” ];then

    7、使用-a -o进行逻辑组合
    [ -r filename -a -x filename ]

    8、命令&&命令
    if grep -q “rm” fn.sh && [ $a -lt 100 ];then

    9、命令||命令
    if grep -q “rm” fn.sh || [ $a -lt 100 ];then

    示例脚本(

    写一段脚本,输入一个测验成绩,根据下面的标准,输出他的评分

    成绩(A-F)。

    A: 90–100

    B: 80–89

    C: 70–79

    D: 60–69

    F: <60

    #/bin/bash
    #Verson:0.1
    #Auther:lovelace
    #Pragram:This pragram is calculation your grade
    #import an argument
    read -p “Please input your grade:” x
    declare -i x
    #jugemet xvalueisnoneornotif["x value is none or not if [ "x" == “” ];then
    echo “You don’t input your grade…”
    exit 5
    fi
    #jugement the gread level
    if [[ “KaTeX parse error: Expected 'EOF', got '&' at position 13: x" -ge "90" &̲& "x” -le “100” ]];then
    echo “Congratulation,Your grade is A.”
    elif [[ “KaTeX parse error: Expected 'EOF', got '&' at position 13: x" -ge "80" &̲& "x” -le “89” ]];then
    echo “Good,Your grade is B.”
    elif [[ “KaTeX parse error: Expected 'EOF', got '&' at position 13: x" -ge "70" &̲& "x” -le “79” ]];then
    echo “Ok.Your grade is C.”
    elif [[ “KaTeX parse error: Expected 'EOF', got '&' at position 13: x" -ge "60" &̲& "x” -le “69” ]];then
    echo “Yeah,Your grade is D.”
    elif [[ “$x” -lt “60” ]];then
    echo “Right,Your grade is F.”
    else
    echo “Unknow argument…”
    fi

    执行结果:

    [root@lovelace if]# ./grade.sh
    Please input your grade:
    You don’t input your grade…
    [root@lovelace if]# ./grade.sh
    Please input your grade:53
    Right,Your grade is F.
    [root@lovelace if]# ./grade.sh
    Please input your grade:88
    Good,Your grade is B.

    展开全文
  • 不管条件表达式是简单还是复杂,返回都是boolean类型值。 if 条件表达式后不能有“;”,否则不管结果错都打印执行语句。 {}可以不用写,但前提条件是if执行语句只能有一行,建议都使用大括号这种标准写法 2.if ...
  • SAS IF判断语句

    千次阅读 2019-01-04 14:00:27
    SAS 提供一下类型的判断语句。 SN 声明类型和说明 ...if语句由条件组成。...if语句后跟随else语句,当布尔...if语句包括acondition,当真正从观察值删除特定数据时。 1.IF 声明 IF 语句由布尔表达式后跟SAS语...
  • (1)if语句和else是一个整体语句,else不能单独使用,与if语句配对使用。 ...在if语句中判断关系表达式和逻辑表达式要注意运算符优先级。 (2)switch语句使用时要注意:1.只能使用整形,例如...
  • if else 语句

    2016-08-31 20:43:00
    语句 语句是指程序命令,都是按照顺序执行的。...语句的类型包括声明语句表达式语句,选择语句(分支),循环语句,跳转语句,异常语句 1、声明语句引:入新的变量或常量。变量声明可以选择为变量赋值...
  • if语句根据条件执行语句,while语句重复执行一些语句。 由于C并不具备布尔类型,所以这些语句在测试值时用都是整型表达式。 零值被解释为假,非零值被解释为真。 for语句是while循环一种常用组合形式速记写法...
  •   语法结构:switch(expr1),expr1是一个整数表达式, 整数表达式可以是int基本类型或Integer包装类型,byte,short,char都可以隐含转换为int,所以都可以,在jdk1.7后String也可以。switch 语句有至少一个 case ...
  • javascript—(02)–if语句与switch语句 1、逻辑运算的深入理解 表达式的理解:1)所有以条件存在的都叫表达式; 2)所有的数据类型都可以成为表达式。 pre:程序的解析是从上往下,从左到右,一行代码如果有...
  • 语句 if else

    2019-10-07 20:56:13
    语句 语句是指程序命令,都是按照顺序执行的。...语句的类型包括声明语句表达式语句,选择语句(分支),循环语句,跳转语句,异常语句 1、声明语句引:入新的变量或常量。变量声明可以选择...
  • 语句 空语句 C最简单语句就是空语句,它本身只包含一个分号。...else子句从属于最靠近他不完整的if语句。所以,请注意语法要求,及时用花括号将语句分开。 while语句 在while循环,可以使用break语句,用...
  • 语句--分支语句if case

    2016-06-19 16:34:00
    语句是指程序命令,都是按照顺序执行的。语句在程序的执行顺序称为“控制流”或者“执行流”。... 语句的类型包括声明语句表达式语句,选择语句,循环语句,跳转语句,异常语句。 1.声明语句 引入新...
  • JAVA中的选择语句

    千次阅读 2014-09-27 15:40:36
    Java中的比较字符,既可以数值进行比较...if语句,即判断括号里面布尔表达式计算结果为true,则执行if块内语句;否则,不执行;注意,if判断条件一定要用括号框住,这一点和MATLAB语言不同。Java中的if-else
  • 语句是指程序命令,都是按照顺序执行的。语句在程序的执行顺序称为“控制流”或“执行流”。 根据程序运行时所收到的输入的响应,在程序每次运行时控制流可能有所不同。...语句的类型包括声明语句表达式语句...
  • 正则表达式

    2014-12-03 14:51:39
    正则表达式前一子表达式的引用所指定的并不是那个子表达式的模式,而是与那个模式相匹配的文本.这样,引用就不只是帮助你输入正则表达式的重复部分的快 捷方式了,它还实施了一条规约,那就是一个字符串各个分离的...
  • 语句是指程序命令,都是按照顺序执行的。语句在程序的执行顺序称为“控制流”或“执行流”。 根据程序运行时所收到的输入的响应,在程序每次运行时控制流可能...语句的类型包括声明语句表达式语句,选择语句...
  • 单独一个变量(if语句中的),也可叫表达式。 注意: 1、表达式有意义时,会先自动计算表达式结果,再赋值或打印。 2、表达式中的数据类型不同时,表达式的运算结果将会是数据范围大的那种。(byte/.
  • 2、使用多态去除条件表达式如果有一个条件表达式,根据对象类型的不同而选择不同的行为 可以将这个条件表达式的每个分支放进一个子类内的覆写函数,然后将原始函数声明为抽象函数 。Employ...
  • JAVA 正则表达式

    热门讨论 2010-01-15 11:16:37
    由于工作的需要,本人经常要面对大量的文字电子资料的整理工作,因此曾在 JAVA 中正则表达式的应 用有所关注,并其有一定的了解,希望通过本文与同行进行有关方面的心得交流。 正则表达式: 正则表达式是一...
  • js中的if()判断和a==b

    千次阅读 2018-12-09 10:51:13
    在js的if语句中,condition可以是任意表达式;而且这个表达式求值的结果不一定是布尔值。js会自动调用Boolean()转换函数将这个表达式的结果转换为一个布尔值。 具体转换如表格所示: 类型 结果 Undefined ...
  • 在javascriptif语句括号中的表达式返回值可以是任何类型,即:if(a)中的a可以是boolean、number、string、object、function、undefined中的任何类型,这便会涉及到不同类型和boolean类型的转换问题。 如果a不是...
  • 条件表达式:1. 可以由多个条件比较组成2. 条件表达式返回结果,必须是boolean类型3....分号,已经把if语句给结束了,后面代码,与if没半毛钱关系。是否执行,不再让if来控制三目运算符与if区别:...
  • 赋值语句与条件语句

    2021-01-18 22:35:52
    一、阻塞赋值 阻塞赋值与C语言赋值方法和分析方法一模一样...if语句对表达式的值做判断时,若为0、x或z则按假处理;若为1则为真。 case语句位宽必须相等,‘bx表示32位; casez表示比较时不考虑高阻值; casex表示不

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 435
精华内容 174
关键字:

对if语句中表达式的类型