博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scala学习手记9 - =和==
阅读量:7156 次
发布时间:2019-06-29

本文共 1148 字,大约阅读时间需要 3 分钟。

= 赋值运算

scala的赋值运算和java的有着很大的不同。如a=b这样的赋值运算,在Java中返回值是a的值,在scala中返回的则是Unit(Unit是值类型,全局只存在唯一的值,即(),通常Unit只用来声明函数或方法的返回值,其他场景基本是没有意义的)。这样就很容易导致一些错误地使用,比如a=b=c这样的赋值运算在java中是绝对可以的,但是在scala中运行就会报错。看一段代码:

var a, b, c = 1a =  b=cprintln(a)

上面这段代码还没有执行就在IDE中提示错误了,勉强执行下看看会报什么错:

报了类型不匹配的错误,因为在第一行代码中scala推断a是一个Int型的变量,后又将b=c的运算结果——一个Unit值——赋值给它,那当然会报错了。

即使只在scala中看赋值运算符“=”号也是一个比较奇怪的东西:它不是一个方法,在默认情况下不可以这样使用——a.=(1)。对于这一点暂时无法深入探究,以后有时间慢慢再看。

==运算

在java中,基本类型和引用类型对==运算有着不同的计算方式:

  • 对于基本类型来说,==运算比较的就是两边表达式的值;
  • 对于引用类型来说,==运算比较的是两边对象的引用而非是对象的值;在Java中比较对象的值使用的是equals方法。

在scala中没有对象,不论类型如何,==运算都是面向值的。这一点由scala的Any类(scala中所有的类都是由它派生而来)提供了保证:它将==()方法实现为final的方法。因此在scala中进行值的比较就可以简单使用==运算,如果还有一些特殊化的比较,就需要改写equals方法了。在scala中如果想执行对于引用的比较可以使用eq()方法。看一下下面这段程序:

val str1 = "hello"val str2 = "hello"val str3 = new String("hello")println(str1 == str2) // Equivalent to Java's str1.equals(str2)println(str1 eq str2) // Equivalent to Java's str1 == str2println(str1 == str3)println(str1 eq str3)

程序的执行结果:

结果很清楚了。

---------------------------------------------------

今天学了scala的=和==,这两个运算和Java中对应符号的运算有着明显的不同,以后需要注意下。

#########

转载于:https://www.cnblogs.com/amunote/p/5576192.html

你可能感兴趣的文章
asp.net 负载均衡下session存储的解决方法
查看>>
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(17)-LinQ动态排序
查看>>
Yii框架操作数据库的几种方式与mysql_escape_string
查看>>
公有云与私有云的差别(转)
查看>>
jQuery插件:jqGrid使用(一)
查看>>
mac显示隐藏文件
查看>>
FastDFS的配置、部署与API使用解读(6)FastDFS配置详解之Storage配置(转)
查看>>
学习心得:《十个利用矩阵乘法解决的经典题目》from Matrix67
查看>>
领域驱动开发推荐代码示例 — Microsoft NLayerApp
查看>>
Linux 安装Rsync和配置
查看>>
hadoop fs -mkdir testdata错误 提示No such file or directory
查看>>
「镁客早报」夏普分拆半导体业务;教育部要求高校组织开展基因编辑相关研究项目自查工作 ...
查看>>
烟沙浮生 | 此间少年(2018-10-15 第五周记)
查看>>
Python特性概要
查看>>
一次关于Flutter的碰壁 | VSCode中搭建开发环境(插件 | 虚拟机 | 新建项目并运行) ...
查看>>
我国首次实现Pb s级光传输,只需一根光纤可供300亿人同时通话 ...
查看>>
docker 入门应用
查看>>
【机器学习PAI实战】—— 玩转人工智能之美食推荐 ...
查看>>
k8s dns 带证书配置
查看>>
400+节点的 Elasticsearch 集群运维
查看>>