这两种说法有什么区别吗?
float ff = 1.2f;
Float fo = new Float(1.2f);
double fg = 3.2d;
Double fh = new Double(2.1d);
我可以在 (1) 和 (3) 之间或 (2) 和 (4) 之间使用“=”吗?
float ff = 1.2f;
Float fo = new Float(1.2f);
double fg = 3.2d;
Double fh = new Double(2.1d);
Can I use '=' between the (1) and (3) or between the (2) and (4)??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
new Float(1.2f) 每次都会创建一个new Float 对象,消耗内存。
如果您使用工厂方法 Float。 valueOf(1.2f) JVM 可以重用现有的 Float 对象实例以获得相同的值。 仅当尚不存在具有相同值的 Float 实例时,它才能创建新的对象实例。
通常您需要使用 Float.valueOf(1.2f) 而不是 new Float(1.2f)。
另请注意,基元和对象对于等于运算符 == 的工作方式不同。
new Float(1.2f) creates a new Float object every time, consuming memory.
If you use factory method Float.valueOf(1.2f) JVM may reuse existing Float object instances for the same value. It could create a new object instance only if there isn't already a Float instance with the same value.
Usually you'll want to use Float.valueOf(1.2f) instead of new Float(1.2f).
Also note that primitives and objects work differently with equals operator ==.
是的,原始类型不能为 NULL,但对象可以。 此外,Float 对象还附加了许多有用的实用函数。
Yeah primitive types can't be NULL, Objects can. Also the Float object has a bunch of useful utility functions attached to it.
通过此声明,您将获得一个原始类型 float 并为其分配一个值。 原始类型是不由其他数据类型组成的数据类型,并且不能进一步拆分(简单解释一下)。 原始类型通常是内置类型。
在本例中,您创建了一个对象,它的内部由较小的数据类型组成,并且还包含方法。
在
基元类型 float 和对象类型之间的主要区别在于基元只是数据的一种格式,没有属性或方法。
3=1 可以正常工作,其余则不行。
With this declaration you have a primitive type float and assigned it a value. Primitive type is a datatype that is composed of no other datatype and it cannot be split furthur(to explain it simply). primitive is generally a builtin type.
In this case you have created an object and internally it consists of smaller data types and also contains methods.
Main difference between primitive type float and object type is the primitive is simply a format for data and has no properties or methods.
3=1 will work fine, rest will not.
在实际应用中,我建议您不要使用 float 或 Float,它不是很准确,而且几乎不是正确的解决方案,而是使用 double 或 Double 。
In real applications I suggest you not use float or Float, its not very accurate and almost never the right solution, use double or Double instead.
是的。
回答编辑问题:
如果您尝试
ff = fg
,您将看到fo = fh
,则会出现“不兼容的类型”。fg = ff
可以正常工作(浮点适合双精度)。fh = fo
仍然会给你一个“不兼容的类型”。Yes.
Responding to the edit questions:
You will see
ff = fg
.fo = fh
.fg = ff
will work fine (the float fits in a double).fh = fo
will still give you an "incompatible types".是的,2 创建了一个对象。
Yes, 2 creates an Object.
是的,第一个是原始类型,第二个是包装原始浮点类型功能的装箱类,例如我们需要第二个才能在集合中使用。 在您必须处理大量类型转换之前(我认为直到 Java 1.5),现在包装类的存在就具备了这些功能。 更多信息。 此处
Yes, first one is a primitive type and second is a boxing class which wraps capabilities of primitive float type, we need second for example for use in the collections. Before you have had to deal a lot with type conversion (I think until Java 1.5) now the existence of wrappers classes takes those capabilities. More information. here
是的。 第一个声明了一个基本类型
float
的变量并将其初始化为 1.2。第二个声明了引用类型
Float
的变量,创建了一个Float
类型的对象,然后为该变量分配了引用。Yes. The first declares a variable of the primitive type
float
and initializes it to 1.2.While the second declares a variable of the reference type
Float
, creates an object of typeFloat
and then assigns a reference to the variable.