- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Java介绍value based
Java 8 的类,并且只用它标记了几个 Java.Util(可选)和 Java.time 类。
基于值的类的标准定义为 here .
这些标准中的大多数(除了在身份敏感操作中使用它们的严格指导以及它们不应该具有可访问的构造函数的事实)似乎适合原始包装类,如 Integer、Double(以及类似的不可变类,如 String)。我知道从技术上讲,开发人员可能已经将这些类与基于身份的操作一起使用(尽管他们不应该使用),因此将它们标记为 value based
现在可能会导致向后兼容性问题。但除此之外,还有什么其他原因可以概念 ,这些包装类不是基于值的吗?
我倾向于将它们视为基于值(value)的原因。
当您定义 Integer myInt = 5
,您实际上只对值 5 感兴趣,而不是对持有该值的引用感兴趣(至少对于我能想到的大多数用例)。同样当你说 String myStr = "hello world"
,你真的对值(value)文字“hello world”感兴趣,而不是它的引用。
最佳答案
基本上,您指出了最重要的原因,即为什么将这些类改造为基于值的类是不可行的:向后兼容性。
您可能已经注意到原始包装类型的构造函数在 Java 9 中已被弃用,这将是朝着这个方向迈出的一步。尽管如此,仅不鼓励而不是禁止使用身份敏感操作,因此不能在此基础上进行破坏兼容性的更改。但是可能会破坏身份敏感操作,这将是唯一可以使后续的实际优势成为基于值的类的事情。
对于像 String
这样的类(class), BigInteger
, 和 BigDecimal
, JDK 开发者甚至不敢采取弃用构造函数的步骤,很可能是因为那太破坏性了。对于某些构造函数,甚至没有等效的工厂方法。
但不仅仅是公共(public)构造函数。
请参阅 valueOf
的文档方法,the one of Integer
示范:
This method will always cache values in the range -128 to 127, inclusive, …
If the value p being boxed is the result of evaluating a constant expression (§15.29) of type
boolean
,byte
,char
,short
,int
, orlong
, and the result istrue
,false
, a character in the range'\u0000'
to'\u007f'
inclusive, or an integer in the range-128
to127
inclusive, then leta
andb
be the results of any two boxing conversions ofp
. It is always the case thata == b
.
valueOf
命名为编译代码将在实践中使用的方法,但要制定自己的规则(正式仅适用于编译时常量),这并没有真正得到返回。如
this answer文档,规范的那部分经历了几次重写,所以当任何人从字面上理解措辞时,保证随着时间的推移而改变......
Constant expressions of type
String
are always "interned" so as to share unique instances, using the methodString.intern
.
The String object is newly created (§12.5) unless the expression is a constant expression (§15.29).
关于java - 原始包装类(整数、 double 等)和字符串可以近似为基于值的类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64546125/
正在尝试创建一个 python 包。似乎有效,但我收到警告。我的 setup.py 是: #! /usr/bin/env python from distutils.core import setup
我导入了一个数据类型 X ,定义为 data X a = X a 在本地,我定义了一个通用量化的数据类型,Y type Y = forall a. X a 现在我需要定义两个函数, toY 和 fro
我似乎无法让编译器让我包装 Tokio AsyncRead: use std::io::Result; use core::pin::Pin; use core::task::{Context, Po
我有两个函数“a”和“b”。当用户上传文件时,“b”被调用。 “b”重命名文件并返回新文件名。之后应该编辑该文件。像这样: def a(): edits file def b(): r
我使用 Entity Framework 作为我的 ORM,我的每个类都实现了一个接口(interface),该接口(interface)基本上表示表结构(每个字段一个只读属性)。这些接口(inter
有没有办法打开一个程序,通常会打开一个新的jframe,进入一个现有的jframe? 这里是解释,我下载了一个java游戏,其中一个是反射游戏,它在一个jframe中打开,框架内有一堆子面板,我想要做
我想要下面的布局 | AA BBBBBBB | 除非没有足够的空间,在这种情况下 | AA | | BBBBBBB | 在这种情况下,A 是复选框,B 是复选框旁边的 Text
我正在尝试以不同的方式包装我的网站,以便将背景分为 2 部分。灰色部分是主要背景,还有白色部分,它较小并包装主要内容。 基本上我想要this看起来像this . 我不太确定如何添加图像来创建阴影效果,
我正在使用 : 读取整数文件 int len = (int)(new File(file).length()); FileInputStream fis = new FileInputStream(f
我使用 maven 和 OpenJDK 1.8 打包了一个 JavaFX 应用程序我的 pom.xml 中的相关部分: maven-assembly-plugin
我正在使用两个不同的 ItemsControl 来生成一个按钮列表。
我有一个情况,有一个变量会很方便,to , 可以是 TimerOutput或 nothing .我有兴趣提供一个采用与 @timeit 相同参数的宏来自 TimerOutputs(例如 @timeit
我正在尝试包装一个名为 content 的 div与另一个具有不同背景的 div。 但是,当将“margin-top”与 content 一起使用时div,似乎包装 DIV 获得了边距顶部而不是 co
文档不清楚,它似乎允许包装 dll 和 csproj 以在 Asp.Net Core 5 应用程序中使用。它是否允许您在 .Net Core 5 网站中使用针对 .Net Framework 4.6
我被要求开发一个层,该层将充当通用总线,而不直接引用 NServiceBus。到目前为止,由于支持不引人注目的消息,这并不太难。除了现在,我被要求为 IHandleMessages 提供我们自己的定义
我正在尝试包装 getServersideProps使用身份验证处理程序函数,但不断收到此错误:TypeError: getServerSideProps is not a function我的包装看
我有一个项目,它在特定位置(不是/src/resources)包含资源(模板文件)。我希望在运行 package-bin 时将这些资源打包。 我看到了 package-options 和 packag
我正在寻找打印从一系列对象中绘制的 div。我可以通过使用下面的管道语法来实现这一点。 each i, key in faq if (key == 0) |
我在 Meteor.js“main.js - Server”中有这个方法。 Meteor.methods({ messageSent: function (message) { var a
我注意到,如果我的自定义Polymer 1.x元素的宽度比纸张输入元素上的验证错误消息的宽度窄,那么错误将超出自定义元素的右边界。参见下图: 有没有一种机制可以防止溢出,例如在到达自定义元素的边界时自
我是一名优秀的程序员,十分优秀!