java三目运算符表达式_使用运算符评估Java表达式

java三目运算符表达式

Java应用程序通过评估表达式来处理数据, 表达式是文字,方法调用,变量名和运算符的组合。 评估表达式通常会产生一个新值,该值可以存储在变量中,用于决策等。

在本教程中,您将学习如何为Java程序编写表达式。 在许多情况下,您将使用运算符来编写Java表达式,并且有很多类型的运算符都知道如何使用。 我将简要介绍Java的运算符类型(包括加性,按位,逻辑,条件,移位和相等类型)及其操作数。 您还将了解重要的概念,例如运算符重载和运算符优先级,并且将看到原始类型转换的演示。 我将以一个小型Java程序结束,您可以使用该Java程序自己进行原始类型的转换。

下载
获取代码 下载本教程中示例应用程序的源代码。
由Jeff Friesen为JavaWorld创建。

简单表达

一个简单的表达式是文字,变量名或方法调用。 没有操作员参与。 以下是一些简单表达式的示例:

52 // integer literal age // variable name System.out.println("ABC"); // method call "Java" // string literal 98.6D // double precision floating-point literal 89L // long integer literal

一个简单的表达式具有type ,它可以是原始类型或引用类型。 在这些示例中, 52是32位整数( int ); System.out.println("ABC"); 为void( void ),因为它不返回任何值; "Java"是一个字符串( String ); 98.6D是64位双精度浮点值( double ); 89L是64位长整数( long )。 我们不知道age的类型。

试用jshell

您可以使用jshell轻松尝试这些以及其他简单表达式。 例如,在jshell>提示符下输入52 ,您将收到类似以下输出的内容:

$1 ==> 52

$1jshell创建以存储52临时变量的名称。 (只要输入文字,便会创建暂存变量。)执行System.out.println($1) ,您将看到52作为输出。

您可以使用-v命令行参数( jshell -v )运行jshell来生成详细反馈。 在这种情况下,输入52将导致以下消息,表明暂存变量$1具有int (32位整数)类型:

| created scratch variable $1 : int

接下来,尝试输入age 。 在这种情况下,您可能会收到一条错误消息,指出未找到该符号。 Java Shell假定age是一个变量,但它不知道其类型。 您将必须包括一个类型。 例如,查看如果输入int age会发生什么。

复合表达式

复合表达式由一个或多个简单表达式组成,这些简单表达式通过运算符集成到较大的表达式中,该运算符是在源代码中以符号表示的一系列指令。 运算符将其表达式操作数转换为另一个值。 例如,在6 * 5 ,乘法运算符( * )将操作数65转换为30。

复合表达式可以组合成更大的表达式。 例如, 6 * 5 + 10表示复合表达式6 * 5以及由其乘积,加法运算符+和数字10组成的复合表达式。 评估的顺序(先乘后加)由Java的优先级规则决定,我们稍后将介绍。

复合表达式也可以很简单

6 * 5是由两个简单表达式65组成的复合表达式。 但是从+的角度来看, 6 * 5也是一个简单的表达式。 +运算符只能看到其乘积30,这是一个简单的表达式。

运算符和操作数

Java的运算符按其操作数进行分类:

  • 元运算符具有一个操作数,例如一元减号 (例如-5 )。
  • 二进制运算符有两个操作数,例如乘法和加法。
  • 三元运算符具有三个操作数; 一个示例是条件运算符?:

Java的运算符也按位置分类:

  • 前缀运算符是在其操作数(例如-5 )之前的一元运算符。
  • 后缀运算符是跟随其操作数的一元运算符(例如age++; -将age的数值加1)。
  • 前缀运算符是运算符的操作数之间的二进制或三进制运算符(例如age + 5 )。

另一个jshell示例

在以下各节中,我将以应用程序的形式介绍示例,以介绍更多运算符。 您也可以使用jshell尝试这些运算符,如下所示:

jshell> 6 + 2 $1 ==> 8 jshell> 7 * $1 $2 ==> 56

在这种情况下,我们首先输入jshell求值的表达式6 + 2 ,将结果8分配给临时变量$1 。 接下来,我们将$1乘以7 ,将56存储在临时变量$2 。 本示例说明您可以在Java表达式中使用暂存变量。

重载运算符

加号(+)运算符是重载运算符的一个示例,该运算符是根据其操作数的类型执行几种运算之一的运算符。 当两个操作数都是整数时,plus运算符执行整数加法,当两个操作数都是浮点值时执行浮点加法,并且当两个操作数都是字符串时执行字符串连接。 负号(-)运算符也重载,执行整数或浮点减法。

Java中的运算符类型

加法运算符

加法运算符通过加法和减法来增加或减少数值。 加法运算符包括加法( + ),减法( - ),后减量( -- ),后增量( ++ ),前减量( -- )和预增量( ++ )。 字符串串联( + )也被认为是可加的。 这是每个运算符的正式定义:

  • 另外 :由于operand1 + operand2 ,其中每个操作数必须是字符或数字型的,添加operand2operand1和返回的总和。 示例: 4 + 6
  • 减法 :由于operand1 - operand2 ,其中每个操作数必须是字符或数字型的,减去operand2operand1和返回的差异。 示例: 4 - 6
  • 后减量 :给定variable -- ,其中variable必须为字符或数字类型,请从variable的值中减去1(将结果存储在variable )并返回原始值。 示例: x--;
  • Postincrement :给定variable ++ ,其中variable必须为字符或数字类型,将1加到variable的值上(将结果存储在variable )并返回原始值。 示例: x++;
  • 预递减 :鉴于-- variable ,其中variable必须是字符或数字型的,从它的值中减去1,结果存储在variable ,并返回新递减的值。 示例:– --x;
  • 预增量 :给定++ variable ,其中variable必须为字符或数字类型,将其值加1,将结果存储在variable ,然后返回新的增量值。 示例: ++x;
  • 字符串连接 :给定operand1 + operand2 ,其中至少一个操作数是String类型,附加operand2的字符串表示来operand1的字符串表示,并返回结果。 示例: "A" + "B"

加,减,后减,后加,前减和前加运算符可以生成溢出结果类型限制的值。 例如,将两个大的正的64位正整数相加会产生一个无法用64位表示的值。 Java的加法运算符未检测到或未报告所导致的溢出。

Java标准类库中的溢出检测

标准类库的Math类包括用于检测溢出的方法。 例如, int addExact(int x, int y)xy的值相加,返回总和或在溢出时引发异常。

应用示例:加法运算符

清单1给出了一个用于与Java的加法运算符一起玩的小应用程序。

清单1. Java中的加法运算符(AddOp.java)

class AddOp { public static void main(String[] args) { System.out.println(125 + 463); System.out.println(2.0 - 6.3); int age = 65; System.out.println(age); System.out.println(age--); System.out.println(age++); System.out.println(--age); System.out.println(++age); System.out.println("A" + "B"); } }

您在上一教程中学习了如何使用JDK的javac工具来编译Java源代码,以及如何使用java工具来运行生成的应用程序。 执行以下命令来编译清单1:

javac AddOp.java

假设编译成功,您应该在当前目录中观察一个AddOp.class文件。 执行以下命令以运行它:

java AddOp

AddOp通过产生以下输出进行响应:

588 -4.3 65 65 64 64 65 AB

研究此输出可以深入了解后递增,后递减,前递增和前递减运算符。 对于后增/后减, age的当前值在增/减操作之前输出。 对于预增/减,执行操作并将其结果存储在age ,然后输出age的新值。

用Java运算符迭代

可加运算符在迭代语句的上下文中特别有用,在该语句中 ,它们用于前进到下一个迭代。 在下一个Java 101教程中,您将学习迭代语句

数组索引运算符

数组索引运算符[] )通过提供元素的索引 (位置)来访问数组元素。 该运算符放置在数组变量名称之后,如grades[0] (访问分配给grades的数组中的第一个元素;第一个元素存储在索引0中)。 这是一个正式定义:

给定variable [ index ] ,其中index必须是整数( int )类型,请从位置index处的variable的存储元素中读取值或将值存储到其中。 示例: temperatures[1]

传递给index的值是一个32位整数,该值可以是0或正值,其范围比数组长度小1,这可以通过在数组名称后附加.length来表示。 例如, grades.length返回数组中分配给grades的元素数。

数组变量与数组

grades不是数组,而是一个变量,它包含对形成数组的内存区域的引用。 所有Java数组都是如此。 但是,通常将grades或任何数组变量称为数组。

示例应用程序:数组索引运算符

清单2将源代码提供给示例应用程序,使您可以使用数组索引运算符。

清单2. Java中的数组索引运算符(ArrayIndexOp.java)

class ArrayIndexOp { public static void main(String[] args) { int[] grades = { 89, 90, 68, 73, 79 }; System.out.println(grades[1]); grades[1] = 91; System.out.println(grades[1]); int index = 4; System.out.println(grades[index]); System.out.println(grades['C' - 'A']); // System.out.println(grades[1D]); } }

清单2比清单1更加有趣。在创建一个五元素的一维整数数组(通过数组初始化器)并将该数组的引用分配给gradesmain()继续访问各种元素。 有两个特别重要的事项:

  • 数组索引运算符的索引最终必须是32位整数(0或正值)。 您可以将包含索引值的整数变量的名称(例如index )指定为索引。
  • 您可以指定涉及字符文字的计算。 (在本教程的后面,我将介绍类型转换,您将发现为什么'C' - 'A'产生一个整数(2),该整数用作有效索引。)

最后一个将1D作为索引传递给数组索引运算符的示例被注释掉,因为它不会编译。 如果取消注释该行并尝试编译清单2,您将收到有关不兼容类型的错误消息:“可能从doubleint.有损转换。”

编译清单2( javac ArrayIndexOp.java )并运行应用程序( java ArrayIndexOp )。 您应该观察以下输出:

90 91 79 68

数组索引运算符和多维数组

您可以将此运算符与多维数组一起使用。 例如,假设一个二维costs数组, costs[0][1]访问分配给第一行(通过[0] )和第二列(通过[1] )的元素。

赋值运算符

赋值运算符= )将表达式的值赋给变量(例如i = 6; ),其中包括数组元素(例如x[0] = 15; )。 表达式和变量必须是赋值兼容的 ,这意味着它们的类型必须一致。 例如,您不能将字符串文字分配给整数变量。 当我们讨论类型转换时,我将详细解释。

复合赋值运算符( +=-=*=/=%=&=|=^=<<=>>=>>>= )评估表达式并将结果分配给变量一步。 每个表达式和变量必须与赋值兼容。 每个运算符都是有用的快捷方式。 例如,代替指定x = x + 3; ,您可以指定较短且等效的x += 3;

保持简短!

而不是指定x = x + 1;x = x - 1; ,您可以指定较短的x += 1;x -= 1; 。 通过指定较短的x++;可以节省更多的击键x++;x--;

按位运算符

翻译自: https://www.infoworld.com/article/2940467/java-101-evaluate-java-expressions-with-operators.html

java三目运算符表达式

    原文作者:cxu0262
    原文地址: https://blog.csdn.net/cxu0262/article/details/107262476
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞