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
$1
是jshell
创建以存储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
,乘法运算符( *
)将操作数6
和5
转换为30。
复合表达式可以组合成更大的表达式。 例如, 6 * 5 + 10
表示复合表达式6 * 5
以及由其乘积,加法运算符+
和数字10
组成的复合表达式。 评估的顺序(先乘后加)由Java的优先级规则决定,我们稍后将介绍。
复合表达式也可以很简单
6 * 5
是由两个简单表达式6
和5
组成的复合表达式。 但是从+
的角度来看, 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
,其中每个操作数必须是字符或数字型的,添加operand2
来operand1
和返回的总和。 示例:4 + 6
。 - 减法 :由于
operand1 - operand2
,其中每个操作数必须是字符或数字型的,减去operand2
从operand1
和返回的差异。 示例: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)
将x
和y
的值相加,返回总和或在溢出时引发异常。
应用示例:加法运算符
清单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更加有趣。在创建一个五元素的一维整数数组(通过数组初始化器)并将该数组的引用分配给grades
, main()
继续访问各种元素。 有两个特别重要的事项:
- 数组索引运算符的索引最终必须是32位整数(0或正值)。 您可以将包含索引值的整数变量的名称(例如
index
)指定为索引。 - 您可以指定涉及字符文字的计算。 (在本教程的后面,我将介绍类型转换,您将发现为什么
'C' - 'A'
产生一个整数(2),该整数用作有效索引。)
最后一个将1D
作为索引传递给数组索引运算符的示例被注释掉,因为它不会编译。 如果取消注释该行并尝试编译清单2,您将收到有关不兼容类型的错误消息:“可能从double
到int.
有损转换。”
编译清单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三目运算符表达式