Scala的原始类型是如何实现的

这些都是怎么实现的?实际上,Scala以与Java同样的方式存储整数:把它当作32位的字。这对在JVM上的效率以及与Java库的互操作性方面来说都很重要。标准的操作如加法或乘法都被实现为原始操作。然而,当整数需要被当作(Java)对象看待的时候,Scala使用了“备份”类java.lang.Integer。如在整数上调用toString方法或者把整数赋值给Any类型的变量时,就会这么做。需要的时候,Int类型的整数能被透明转换为java.lang.Integer类型的“装箱整数”。

所有这些听上去都近似Java5里的自动装箱并且它们的确很像。不过有一个关键差异,Scala里的装箱比Java里的更少看见。尝试下面的Java代码:

// Java代码  
boolean isEqual(int x,int y) {  
 return x == y;  
}  
System.out.println(isEqual(421,421));

你当然会得到true。现在,把isEqual的参数类型变为java.lang.Integer(或Object,结果都一样):

// Java代码  
boolean isEqual(Integer x, Integery) {  
 return x == y;  
}  
System.out.println(isEqual(421,421));

你会发现你得到了false!原因是数421被装箱了两次,因此参数x和y是两个不同的对象。

因为在引用类型上==表示引用相等,而Integer是引用类型,所以结果是false。这是展示了Java不是纯面向对象语言的一个方面。我们能清楚观察到原始类型和引用类型之间的差别。

现在在Scala里尝试同样的实验:

scala>def isEqual(x:Int, y:Int) = x == y  
isEqual:(Int,Int)Boolean  
scala>isEqual(421,421)  
res10:Boolean = true 
scala>def isEqual(x:Any, y:Any) = x == y  
isEqual:(Any,Any)Boolean  
scala>isEqual(421,421)  
res11:Boolean = true

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, scala
, 类型
, integer
, 整数
, 装箱
, java整数
原始类型
scala 类型转换、scala强制类型转换、scala 数据类型、scala unit类型、scala any 类型转换,以便于您获取更多的相关知识。

时间: 2024-12-31 09:03:13

Scala的原始类型是如何实现的的相关文章

Java的封装类型和原始类型的区别?那种性能好?

问题描述 Java的封装类型和原始类型的区别?在JavaWeb程序当中,pojo(javabean)实体类中,是声明为封装类型好还是原始类型好?(比如:int-Integer)例如:public class User{private int id;private Integer id1;}int 默认初始化为0:Integer初始化为null:如果在web前端通过ajax请求到后台的时候,参数传递为 id=&di1=后台获取参数值时:id=1id1=null然后,保存到数据库时,Integer是

ios-iOS 开发,socket 传输的都是data 类型,怎么知道这个data 的原始类型是图片还是

问题描述 iOS 开发,socket 传输的都是data 类型,怎么知道这个data 的原始类型是图片还是 iOS 开发,socket 传输的都是data 类型,怎么知道这个data 的原始类型是图片还是字符串类型.数据传输用的GCDAsynSocket 解决方案 只有解析了之后才能知道是什么类型,按照规定的格式的话,就不需要这个判断,传输和监听的都规定好了传送的格式. 解决方案二: 你可以查阅下某种图片的格式定义, 例如jpg, 其原始数据中, 有类型标识 解决方案三: Data类型的Url

多功能一体机CLX-3186FN如何设置原始类型

1.按控制面板上的[复印]键. 2.按控制面板上的[菜单]键. 3.按控制面板上的左/右箭头选择[复印功能],再按[OK]键.   4.按控制面板上的左/右箭头选择[原始类型],再按[OK]键.     5.按控制面板上的左/右箭头选择所需图像模式,然后按[OK]键. 文字/照片:适用于带有文本和照片的原件. 照片:适用于原件是照片的情况. 杂志:适用于原件是杂志形式的情况. 文字:适用于内容主要是文本的原件. 6.按[返回]键,机器回到待机状态.   完成上述操作后,机器原始类型就设置成功了.

《JavaScript面向对象精要》——第1章 原始类型和引用类型 1.1 什么是类型

第1章 原始类型和引用类型 大多数开发者在使用Java或C#等基于类的语言的过程中学会了面向对象编程.由于JavaScript没有对类的正式支持,这些开发者在学习JavaScript时往往会迷失方向.JavaScript不需要在开头就定义好各种类,你可以在写代码的过程中根据需要创建数据结构.由于JavaScript缺少类,也就缺少用于对类进行分组的包.在Java中,包和类的名字不仅定义了对象的类型,也在工程中列出文件和目录的层次结构,JavaScript编程就好像从一块空白石板开始:你可以在上面

《JavaScript面向对象精要》——1.2 原始类型

1.2 原始类型 原始类型代表照原样保存的一些简单数据,如true和25.JavaScript共有5种原始类型,如下. Boolean 布尔,值为true或false Number 数字,值为任何整型或浮点数值 String 字符串,值为由单引号或双引号括出的单个字符或连续字符(JavaScript不区分字符类型) Null 空类型,该原始类型仅有一个值:null Undefined 未定义,该原始类型仅有一个值:undefined(undefined会被赋给一个还没有初始化的变量) 前3种类型

在UWP的XAML中使用原始类型

问题: I'm trying to access the system namespace for StaticResource variables in XAML on UWP. Here's (mostly) what I'm using: <Page x:Class="App.UWP.Views.Step6" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x

scala的类与类型

scala的类与类型 类和类型 List<String>和List<Int>类型是不一样的,但是jvm运行时会采用泛型擦除.导致List<String>和List<Int>都是Class<List>.为了得到正确的类型,需要通过反射. 泛型擦除 Java中的泛型基本上都是在编译器这个层次来实现的.在生成的Java字节码中是不包含泛型中的类型信息的.使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉.这个过程就称为类型擦除.泛型擦除是为了兼容

Scala入门到精通——第二十四节 高级类型 (三)

作者:摆摆少年梦 视频地址:http://blog.csdn.net/wsscy2004/article/details/38440247 本节主要内容 Type Specialization Manifest.TypeTag.ClassTag Scala类型系统总结 在scala中,类(class)与类型(type)是两个不一样的概念.我们知道类是对同一类型数据的抽象,而类型则更具体.比如定义class List[T] {}, 可以有List[Int] 和 List[String]等具体类型,

Scala入门到精通—— 第二节Scala基本类型及操作、程序控制结构

本节主要内容 Scala基本类型 基本类型操作 Scala程序控制结构 Scala基本类型 Scala中的基本数据类型如下图: (来源:Programming in Scala) 从上表中可以看出,Scala的基本数据类型与Java中的基本数据类型是一一对应的,不同的是Scala的基本数据类型头字母必须大写,本节以Int.Long.String.Char.Double及Float类型为例介绍Scala的基本类型定义 整数类型变量定义: //16进制定义法 scala> val x=0x29 x: