开发者学堂课程【Scala 核心编程-基础:赋值运算符】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8905
赋值运算符
基本内容
一、 介绍
二、 赋值运算符的分类
三、 案例演示
四、 面试题
一、介绍
赋值运算符就是将某介运算后的值,赋给指定的变量。
二、赋值运算符的分类
1、分类
赋值运算符跟 Java 几乎是一样的。
有“+=”、“-=”、“*=”、“/+”、“%=”等等。
运算符 |
描述 |
实例 |
= |
简单的赋值运算符,将一个表达式的值赋给一个左值。 |
C=A+B将A+ B表达式结果赋值给C。 |
+= |
相加后再赋值 |
C+= A等于C=C +A |
-= |
相减后再赋值 |
C-=A等于C=C-A |
*= |
相乘后再赋值 |
C*=A等于C=C*A |
/= |
相除后再赋值 |
C/=A等于C=C/A |
%= |
求余后再赋值 |
C%=A等于c、C=C%A |
2、续表
(1) 细节:赋值运算符包含的左移、右移、按位与后赋值、按位异或后赋值、按位或后赋值。
这些内容在面试的时候有可能会被问到,它的逻辑的规则跟 Java 是一样的。如果这些内容没有理解的话,一定要去仔细的研读。因为在做大数据的时候,有些时候为了增快速度,程序员喜欢用位移的方式或者移位的方式来进行处理,如果这个规则没有明白,就很难运用到之后的程序设计中。尤其要注意对一个复数进行移动过后的结果怎么推导出来的,一定要去看它原码、反码、补码的关系。不然,这个内容很难理解透彻。
运算符 |
描述 |
实例 |
<<= |
左移后赋值 |
C<<=2等于C=C<< 2 |
>>= |
右移后赋值 |
C>>=2等于C=C>> 2 |
&= |
按位与后赋值 |
C&=2等于c=C&2 |
^= |
按位异或后赋值 |
C^=2 等于C=C^2 |
C^=2 等于C=C^2 |
按位或后赋值 |
C|=2 等于c=C|2 |
说明:这部分的赋值运算涉及到二进制相关知识,其运行的规则和 Java 一样。
(2) 举例1:
比如说:赋值的单词是 assignment,一般简写为 assignoper。
package com. atguigu. chapter03. assignoper
object Demo01 {
def main (args: Array[String]): Unit = {
var num=2
//先将程序初始化;
numくく= 2
//向左移动
println("num=" + num)
}
}
运行结果:num = 8。
问:为什么结果等于8?
答:相当于给 var num=2连续乘了两个2,整体向左边移动,移动一位乘2,这个速度理论上来说是最快的。
(3) 举例2:
package com. atguigu. chapter03. assignoper
object Demo01 {
def main (args: Array[String]): Unit = {
var num=2
//先将程序初始化;
numくく= 2
//向左移动2位,num = 8。
num
> >
= 1
//向右移动1位,num = 4。
println("num=" + num)
}
}
运行结果:num = 4。
注意:如果面试官进行提问的话,一般不会问这种。因为这些程序设计比较简单,面试官可能会主要考察求职者的基本功,面试官会提问为什么这样做?尤其是在面试官提问的时候往往不会用正数,他可能会提问数字负二、负三,问求职者结果是什么。如果答不上来,面试官会觉得基本功比较差。
三、案例演示
1、交换两个数的值。经典的赋值运算的值。
var a= 10
var b= 99
printIn("a="+a+"tb="+b)
//交换
val t=a
a= b
b= t
printn("a="+a+"tb="+b)
2、赋值运算符特点
(1) 运算顺序从右往左,一般来说是从左向右,但是赋值是从右向左。
(2) 赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值/字面量 。也有可能是函数,
1举例1:
package com. atguigu. chapter03. assignoper
object Demo01 {
def main (args: Array[String]): Unit = {
var num=2
//先将程序初始化;
numくく= 2
//向左移动2位,num = 8。
num
> >
= 1
//向右移动1位,num = 4。
println("num=" + num)
//在 scala 中支持代码块,返回值
val
res
= {
i
f (
num
>1) “Hello , ok”else 100
//如果 num 大于1,那么就返回 Hello , ok;如果不大于1,那么就返回100。
// 语句的进一步扩展, 返回的值可以根据它不同的需求返回不同的类型。
}
p
rinln("res=" + res),
}
}
2举例2:
package com. atguigu. chapter03. assignoper
object Demo01 {
def main (args: Array[String]): Unit = {
var num=2
//先将程序初始化;
numくく= 2
//向左移动2位,num = 8。
num
> >
= 1
//向右移动1位,num = 4。
println("num=" + num)
//在scala中支持代码块,返回值
val
res
= {
90
}
}
打印出来可以看到,返回值为90。
(3) 复合赋值运算符等价于下面的效果,比如: a+=3 等价于 a=a+3。这个和 Java 运算是一样的。
四、面试题
1、题目:
有两个变量,a 和 b,要求将其进行交换,但是不允许使用中间变量,最终打印结果。
2、代码举例:
v
ar a = 10
v
ar b = 20
a
= a + b
b
= a – b
//=>(a+b)-b = a
//
相当于把a给b
a = a – b
//=>(a+b)-a = b
//
相当于把b给a
3、其他解题方法
可以使用“位运算”来实现题目的解答。