<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Kotlin 的運算符 > 原文: [http://zetcode.com/kotlin/operators/](http://zetcode.com/kotlin/operators/) 在本教程中,我們將介紹 Kotlin 運算符。 我們展示了如何使用運算符創建表達式。 運算符是特殊符號,表示已執行某個過程。 編程語言的運算符來自數學。 程序員處理數據。 運算符用于處理數據。 操作數是運算符的輸入(參數)之一。 表達式是根據操作數和運算符構造的。 表達式的運算符指示將哪些運算應用于操作數。 表達式中運算符的求值順序由運算符的優先級和關聯性確定。 一個運算符通常有一個或兩個操作數。 那些僅使用一個操作數的運算符稱為一元運算符。 那些使用兩個操作數的對象稱為二進制運算符。 某些運算符可以在不同的上下文中使用。 例如,`+`運算符可以在不同的情況下使用:它添加數字,連接字符串或指示數字的符號。 我們說運算符是重載。 ## Kotlin 標志運算符 有兩個符號運算符:`+`和`-`。 它們用于指示或更改值的符號。 `KotlinSignOperatorsEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { println(2) println(+2) println(-2) } ``` `+`和`-`符號指示值的符號。 加號可用于表示我們有一個正數。 可以省略它,并且在大多數情況下可以這樣做。 `KotlinMinusSignEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { val a = 1 println(-a) println(-(-a)) } ``` 減號更改值的符號。 ## Kotlin 賦值運算符 賦值運算符`=`將值賦給變量。 變量是值的占位符。 在數學中,=運算符具有不同的含義。 在等式中,`=`運算符是一個相等運算符。 等式的左邊等于右邊的等式。 ```kt val x = 1 ``` 在這里,我們為`x`變量分配一個數字。 ```kt x = x + 1 ``` 這個表達式在數學上沒有意義,但是在編程中是合法的。 該表達式將`x`變量加 1。 右邊等于 2,并且 2 分配給`x`。 ```kt 3 = x ``` 此代碼行導致語法錯誤。 我們無法為字面值分配值。 ## Kotlin 擴展賦值運算子 擴展賦值運算符是由兩個運算符組成的速記運算符。 增強的賦值運算符在其他編程語言中也稱為復合賦值運算符。 ```kt a = a + 3 a += 3 ``` `+=`復合運算符是這些速記運算符之一。 以上兩個表達式相等。 將值 3 添加到變量`a`中。 Kotlin 擴展分配運算符為: ```kt += -= *= /= %= ``` 下面的示例使用兩個復合運算符。 `KotlinAugmentedAssignmentOperatorsEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { var a = 1 a = a + 1 println(a) a += 5 println(a) a *= 3 println(a) } ``` 我們使用`+=`和`*=`復合運算符。 ```kt var a = 1 a = a + 1 ``` `a`變量被初始化為 1。 使用非速記符號將值 1 添加到變量。 ```kt a += 5 ``` 使用`+=`復合運算符,將 5 加到`a`變量中。 該語句等于`a = a + 5`。 ```kt a *= 3 ``` 使用`*=`運算符,將`a`乘以 3。該語句等于`a = a * 3`。 ```kt 2 7 21 ``` 這是示例輸出。 ## Kotlin 連接字符串 在 Kotlin 中,`+`運算符還用于連接字符串。 `KotlinConcatenateStringsEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { println("Return " + "of " + "the king.") println("Return".plus(" of").plus(" the king.")) } ``` 我們將三個字符串連接在一起。 ```kt println("Return " + "of " + "the king.") ``` 字符串用`+`運算符連接。 ```kt println("Return".plus(" of").plus(" the king.")) ``` 連接字符串的另一種方法是`plus()`方法。 ## Kotlin 增減運算符 將值遞增或遞減一個是編程中的常見任務。 Kotlin 為此有兩個方便的運算符:`++`和`--`。 ```kt x++ x = x + 1 ... y-- y = y - 1 ``` 上面兩對表達式的作用相同。 `KotlinIncDecEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { var x = 6 x++ x++ println(x) x-- println(x) } ``` 在上面的示例中,我們演示了兩個運算符的用法。 ```kt int x = 6 x++ x++ ``` 將`x`變量初始化為 6。然后將`x`遞增兩次。 現在變量等于 8。 ```kt x-- ``` 我們使用減量運算符。 現在變量等于 7。 ## Kotlin 算術運算符 下表是 Kotlin 中的算術運算符表。 | 符號 | 名稱 | | --- | --- | | `+` | 加法 | | `-` | 減法 | | `*` | 乘法 | | `/` | 乘法 | | `%` | 余數 | 以下示例顯示了算術運算。 `KotlinArithmeticOperatorsEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { val a = 10 val b = 11 val c = 12 val add = a + b + c val sb = c - a val mult = a * b val div = c / 3 val rem = c % a println(add) println(sb) println(mult) println(div) println(rem) } ``` 在前面的示例中,我們使用加法,減法,乘法,除法和余數運算。 這些都是數學所熟悉的。 ```kt val rem = c % a ``` `%`運算符稱為余數或模運算符。 它找到一個數除以另一個的余數。 例如`9 % 4`,9 模 4 為 1,因為 4 兩次進入 9 且余數為 1。 整數除法和浮點除法之間有區別。 `KotlinDivisionEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { val c = 5 / 2 println(c) val d = 5 / 2.0 println(d) } ``` 在前面的示例中,我們將兩個數字相除。 ```kt val c = 5 / 2 ``` 在這段代碼中,我們完成了整數除法。 除法運算的返回值為整數。 當我們將兩個整數相除時,結果是一個整數。 ```kt val d = 5 / 2.0 ``` 如果值之一是`double`或`float`,則執行浮點除法。 在我們的例子中,第二個操作數是雙精度數,因此結果是雙精度數。 ```kt 2 2.5 ``` 我們看到了程序的結果。 ## Kotlin 布爾運算符 在 Kotlin 中,我們有三個邏輯運算符。 | 符號 | 名稱 | | --- | --- | | `&&` | 邏輯與 | | <code>&#124;&#124;</code> | 邏輯或 | | `!` | 否定 | 布爾運算符也稱為邏輯運算符。 `KotlinBooleanExpEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { val x = 3 val y = 8 println(x == y) println(y > x) if (y > x) { println("y is greater than x") } } ``` 許多表達式導致布爾值。 例如,在條件語句中使用布爾值。 ```kt println(x == y) println(y > x) ``` 關系運算符始終導致布爾值。 這兩行分別顯示`false`和`true`。 ```kt if (y > x) { println("y is greater than x") } ``` 僅在滿足括號內的條件時才執行`if`語句的主體。 `y > x`返回`true`,因此消息`"y`大于`x"`被打印到終端。 `true`和`false`關鍵字表示 Kotlin 中的布爾字面值。 `KotlinAndOperatorEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { val a = true && true val b = true && false val c = false && true val d = false && false println(a) println(b) println(c) println(d) } ``` 該代碼示例顯示了邏輯和(`&&`)運算符。 僅當兩個操作數均為`true`時,它的評估結果為`true`。 ```kt true false false false ``` 只有一個表達式可得出`true`。 如果兩個操作數中的任何一個為`true`,則邏輯或(`||`)運算符的計算結果為`true`。 `KotlinOrOperatorEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { val a = true || true val b = true || false val c = false || true val d = false || false println(a) println(b) println(c) println(d) } ``` 如果運算符的任一側為真,則操作的結果為真。 ```kt true true true false ``` 四個表達式中的三個表示為`true`。 否定運算符`!`將`true`設為`false`,并將`false`設為`false`。 `KotlinNegationEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { println(! true) println(! false) println(! (4 < 3)) } ``` 該示例顯示了否定運算符的作用。 ```kt false true true ``` 這是程序的輸出。 ## Kotlin 比較運算符 比較運算符用于比較值。 這些運算符總是產生布爾值。 | 符號 | 含義 | | --- | --- | | `<` | 小于 | | `<=` | 小于或等于 | | `>` | 大于 | | `>=` | 大于或等于 | | `==` | 等于 | | `!=` | 不等于 | 比較運算符也稱為關系運算符。 `KotlinComparisonOperatorsEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { println(3 < 4); println(3 == 4); println(4 >= 3); println(4 != 3); } ``` 在代碼示例中,我們有四個表達式。 這些表達式比較整數值。 每個表達式的結果為`true`或`false`。 在 Kotlin 中,我們使用`==`比較數字。 (某些語言(例如 Ada,Visual Basic 或 Pascal)使用`=`比較數字。) ## Kotlin 按位運算符 與 Java 不同,Kotlin 中沒有按位運算符。 Kotlin 已經命名了執行按位運算的函數。 * `shl(bits)` – 有符號左移(Java 的`<<`) * `shr(bits)` – 有符號右移(Java 的`>>`) * `ushr(bits)` – 無符號右移(Java 的`>>>`) * `and(bits)` – 按位與 * `or(bits)` – 按位或 * `xor(bits)` – 按位異或 * `inv()` – 按位反轉 這些函數僅適用于`Int`和`Long`類型。 按位操作在兩個數字之間進行逐位比較。 僅當操作數中的兩個對應位均為 1 時,位位置的結果才為 1。 ```kt 00110 & 00011 = 00010 ``` 第一個數字是二進制符號 6,第二個數字是 3,結果是 2。 ```kt println(6 and 3) // prints 2 println(3 and 6) // prints 2 ``` 按位或操作在兩個數字之間進行逐位比較。 如果操作數中的任何對應位為 1,則位位置的結果為 1。 ```kt 00110 | 00011 = 00111 ``` 結果為`00110`或十進制 7。 ```kt println(6 or 3) // prints 7 println(3 or 6) // prints 7 ``` ## Kotlin `is`運算符 要在運行時檢查對象是否符合給定類型,我們可以使用`is`運算符或其否定形式`!is`。 `KotlinIsOperatorEx.kt` ```kt package com.zetcode open class Base class Derived : Base() fun main(args: Array<String>) { val b = Base() val d = Derived() println(d is Base) println(b is Derived) println(d is Any) } ``` 在示例中,我們有兩個類:一個基類和一個從基類派生的類。 ```kt println(d is Base) ``` 此行檢查變量`d`是否指向作為`Base`類實例的類。 由于`Derived`類繼承自`Base`類,因此它也是`Base`類的實例。 該行打印正確。 ```kt println(b is Derived) ``` `b`對象不是`Derived`類的實例。 該行顯示`false`。 ```kt println(d is Any) ``` 每個類都有`Any`作為超類。 因此,`d`對象也是`Any`類的實例。 ```kt true false true ``` 這是程序的輸出。 ## Kotlin Lambda 運算符 Kotlin 具有 lambda 運算符(`->`)。 它分隔了 lambda 表達式的參數和主體。 `KotlinLambdaOperatorEx.kt` ```kt package com.zetcode import java.util.Arrays fun main(args: Array<String>) { val words = arrayOf("kind", "massive", "atom", "car", "blue") Arrays.sort(words) { s1: String, s2: String -> s1.compareTo(s2) } println(Arrays.toString(words)) } ``` 在示例中,我們定義了一個字符串數組。 使用`Arrays.sort()`方法和 lambda 表達式對數組進行排序。 ```kt [atom, blue, car, kind, massive] ``` 這是輸出。 ## Kotlin 雙冒號運算符 雙冒號運算符(::)用于創建類或函數引用。 `KotlinDoubleColonOperatorEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { val c = String::class c.supertypes.forEach { e -> println(e) } val words = listOf("car", "forest", "Bible") println(words.map(String::length)) } ``` 在代碼示例中,我們使用雙冒號運算符創建對類和函數的引用。 ```kt val c = String::class c.supertypes.forEach { e -> println(e) } ``` 對于雙冒號運算符,我們指的是`String`類。 我們打印其所有祖先。 ```kt val words = listOf("car", "forest", "Bible") println(words.map(String::length)) ``` 在這里,我們將`length()`函數應用于列表的所有單詞。 ```kt kotlin.Comparable<kotlin.String> kotlin.CharSequence java.io.Serializable kotlin.Any [3, 6, 5] ``` 這是輸出。 ## Kotlin 范圍運算符 Kotlin 范圍運算符(`..`)允許創建值范圍。 `KotlinRanageOperatorEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { for (i in 1..14 step 3) { println(i) } } ``` 該示例使用范圍運算符在`for`循環中創建整數序列。 ```kt 1 4 7 10 13 ``` 這是輸出。 ## 非空斷言運算符 非`null`斷言運算符(`!!`)會將任何值轉換為非`null`類型,并且如果該值為`null`則引發異常。 `KotlinNullAssertionOperatorEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { // val words = listOf("forest", null, "Bible", "sky") val words = listOf("forest", "Bible", "sky") var nOfChars: Int = 0 for (word in words) { val n = word!!.length nOfChars += n } println("There are ${nOfChars} characters in the list") } ``` 該示例計算單詞列表中的字符數。 如果列表包含空值,則拋出`KotlinNullPointerException`。 ## Kotlin Elvis 運算符 Elvis 運算符?:如果不為 null,則返回其第一個表達式,否則返回第二個表達式。 `KotlinElvisOperatorEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { val words = listOf("forest", null, "Bible", "sky") for (word in words) { val n = word?.length ?: 0 println("${word} has ${n} letters") } } ``` 在示例中,我們使用 Elvis 運算符檢查列表中的空值。 ```kt val n = word?.length ?: 0 ``` 如果變量`word`包含 null,則?:返回 0。 ```kt forest has 6 letters null has 0 letters Bible has 5 letters sky has 3 letters ``` 這是輸出。 ## Kotlin 空安全運算符 Kotlin 的`null`安全操作符`?.`提供了安全的方法調用-僅當對象不為`null`時才調用方法。 `KotlinNullSafetyOperatorEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { val words = listOf("forest", null, "Bible", "sky") for (word in words) { println(word?.toUpperCase()) } ``` 在示例中,我們將字符串轉換為大寫; 我們使用`null`安全運算符。 對于`null`值,不調用該方法。 ```kt FOREST null BIBLE SKY ``` 這是輸出。 ## Kotlin 索引訪問運算符 Kotlin 索引訪問運算符用于從數組獲取值。 `KotlinIndexAccessOperatorEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { val nums = arrayOf(3, 2, 1, 4, 5, 6, 7) val v1 = nums[0] val v2 = nums[3] println(v1) println(v2) } ``` 在示例中,我們使用`[]`運算符從數組中檢索兩個值。 ## Kotlin 引用相等運算符 Kotlin 區分結構相等和引用相等。 結構相等運算符(`==`)檢查兩個對象是否具有相同的內容。 引用相等運算符(`===`)檢查變量是否指向內存中的同一對象。 `KotlinreferentialEqualityOperatorEx.kt` ```kt package com.zetcode data class Item(var name: String, var color: String) fun main(args: Array<String>) { val i1 = Item("coin", "brown") val i2 = i1 println("Output: ${i1 == i2}") println("Output: ${i1 === i2}") val i3 = Item("coin", "brown") val i4 = Item("coin", "brown") println("Output: ${i3 == i4}") println("Output: ${i3 === i4}") } ``` 該示例演示了`==`和`===`運算符之間的區別。 ```kt Output: true Output: true Output: true Output: false ``` 這是輸出。 ## Kotlin 運算符優先級 運算符優先級告訴我們首先評估哪個運算符。 優先級對于避免表達式中的歧義是必要的。 以下表達式 28 或 40 的結果是什么? ```kt 3 + 5 * 5 ``` 像數學中一樣,乘法運算符的優先級高于加法運算符。 結果是 28。 ```kt (3 + 5) * 5 ``` 要更改評估的順序,可以使用括號。 括號內的表達式始終首先被求值。 上面的表達式的結果是 40。 `KotlinOperatorPrecedenceEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { println(3 + 5 * 5) println((3 + 5) * 5) println(!true or true) println(!(true or true)) } ``` 在此代碼示例中,我們顯示一些表達式。 每個表達式的結果取決于優先級。 ```kt println(3 + 5 * 5) ``` 該行打印 28。乘法運算符的優先級高于加法。 首先,計算`5 * 5`的乘積,然后加 3。 ```kt println((3 + 5) * 5) ``` 可以通過使用方括號來更改表達式的求值。 在這種情況下,將評估`3 + 5`,然后將該值乘以 5。此行顯示 40。 ```kt println(!true or true) ``` 在這種情況下,求反運算符的優先級高于按位或。 首先,將初始`true`值取反為`false`,然后`|`運算符將`false`和`true`組合在一起,最后給出`true`。 ```kt 28 40 true false ``` 這是示例輸出。 ## 關聯規則 有時,優先級不能令人滿意地確定表達式的結果。 還有另一個規則稱為關聯性。 運算符的關聯性決定了具有相同優先級的運算符的評估順序。 ```kt 9 / 3 * 3 ``` 此表達式的結果是 9 還是 1? 乘法,刪除和模運算符從左到右關聯。 因此,該表達式的計算方式為:`(9 / 3) * 3`,結果為 9。 算術運算符,布爾運算符和關系運算符從左到右關聯。 三元運算符,遞增,遞減,一元正負,取反,按位不,類型強制轉換,對象創建運算符從右到左關聯。 `KotlinAssociativityRuleEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { var j = 0 j *= 3 + 1 println(j) } ``` 在示例中,我們的關聯規則確定表達式的結果。 ```kt var j = 0 j *= 3 + 1 ``` 增強的賦值運算符從右到左關聯。 我們可能期望結果為 1。但是實際結果為 0。由于有關聯性。 首先評估右邊的表達式,然后應用復合賦值運算符。 ## 計算素數 在下面的示例中,我們將計算素數。 `KotlinPrimeNumbersEx.kt` ```kt package com.zetcode fun main(args: Array<String>) { val nums = intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28) print("Prime numbers: ") for (num in nums) { if (num == 0 || num == 1) { continue } if (num == 2 || num == 3) { print(num.toString() + " ") continue } var i = Math.sqrt(num.toDouble()).toInt() var isPrime = true while (i > 1) { if (num % i == 0) { isPrime = false } i-- } if (isPrime) { print(num.toString() + " ") } } print('\n') } ``` 在上面的示例中,我們處理了幾個運算符。 質數(或質數)是一個自然數,它具有兩個截然不同的自然數除數:1 和它本身。 我們選擇一個數字并將其除以 1 到所選數字的數字。 實際上,我們不必嘗試所有較小的數字。 我們可以將數字除以所選數字的平方根。 該公式將起作用。 我們使用余數除法運算符。 ```kt val nums = intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28) ``` 我們將從這些數字計算素數。 ```kt if (num == 0 || num == 1) { continue } ``` 值 0 和 1 不被視為素數。 ```kt if (num == 2 || num == 3) { print(num.toString() + " ") continue } ``` 我們跳過 2 和 3 的計算。它們是質數。 請注意等式和條件或運算符的用法。 `==`的優先級高于`||`運算符。 因此,我們不需要使用括號。 ```kt var i = Math.sqrt(num.toDouble()).toInt() ``` 如果我們僅嘗試小于所討論數字的平方根的數字,那么我們可以。 ```kt while (i > 1) { ... i--; } ``` 這是一個`while`循環。 `i`是計算出的數字的平方根。 我們使用減量運算符將每個循環周期的`i`減 1。 當`i`小于 1 時,我們終止循環。 例如,我們有 9。9 的平方根是 3。我們將 9 的數字除以 3 和 2。這對于我們的計算就足夠了。 ```kt if (num % i == 0) { isPrime = false } ``` 如果余數除法運算符針對任何`i`值返回 0,則說明該數字不是質數。 在本教程中,我們介紹了 Kotlin 運算符。 您可能也對相關教程感興趣: [Kotlin 列表教程](/kotlin/lists/), [Kotlin 變量教程](/kotlin/variables/), [Kotlin 字符串教程](/kotlin/strings/), [Kotlin 控制流教程](/kotlin/controlflow/) 和 [Kotlin 數組教程](/kotlin/arrays/)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看