标签: autoboxing

Java整数与字符串自动装箱设计

在Java中,我可以执行以下操作来简洁地防范NullPointerException:

if ("myString".equals(someOtherString))
Run Code Online (Sandbox Code Playgroud)

但我不能对整数做同样的事,例如

if (5.equals(someOtherInteger))
Run Code Online (Sandbox Code Playgroud)

我收到编译时错误.有关为何做出此设计决定的任何想法?或者任何可能解释它的资源?提前致谢.

编辑:someOtherInteger是一个Integer,而不是一个int.

java autoboxing

1
推荐指数
2
解决办法
2263
查看次数

关于第二个陈述,以下哪一项是正确的?(拆箱和自动装箱)

我已经浏览了整个互联网,试图解决这个问题.任何人都可以正确回答并解释原因吗?非常感谢!

请查看以下代码.

Integer myNumber;
myNumber = 5;
Run Code Online (Sandbox Code Playgroud)

关于第二个陈述,以下哪一项是正确的?

  1. 该语句执行拆箱

  2. 该语句执行自动包装.

  3. 该声明执行自动装箱.

  4. 它会导致错误,因为您无法将基元类型分配给包装类对象.

java autoboxing unboxing

1
推荐指数
1
解决办法
1703
查看次数

C#:为什么以下比较表明0!= 0

我最近在一些比较代码中偶然发现了有趣的错误,其中两个对象的属性都等于0.0m.当该属性转换为int并进行比较时,比较永远不会相等.复制如下:

采用抽象A和两个实现B和C:

public abstract class A
{
    public decimal MyProp { get; set; }
}

public class B : A
{
}

public class C : A
{
}
Run Code Online (Sandbox Code Playgroud)

抽象定义了几个公共属性,主要是但不完全是十进制.所有公共属性都是原始属性.具体的子类型表示从两个不同的数据源获得的这种抽象.当且仅当它们的所有公共属性相等时,A类型的两个对象才被认为是相等的.需要注意的是:使用默认的舍入行为(MidpointRounding.ToEven),所有十进制属性都应在比较前转换为int.这导致了以下比较代码:

private static bool Compare(A a1, A a2)
{
    var propertiesList = typeof(A).GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList();
    foreach (var propertyInfo in propertiesList)
    {
        var value1 = propertyInfo.GetValue(a1);
        var value2 = propertyInfo.GetValue(a2);

        if (propertyInfo.PropertyType == typeof(decimal))
        {
            value1 = Convert.ToInt32(value1);
            value2 = Convert.ToInt32(value2);
        }

        // debugger confirms that value1 is 0 and …
Run Code Online (Sandbox Code Playgroud)

c# reflection autoboxing equality

1
推荐指数
1
解决办法
195
查看次数

如何/为什么整数缓存在Java中更快?

根据Java语言规范第5.1.7节,Java将-c8 Integer从-128 缓存到127以进行性能优化.

因此,当您a == b与缓存范围中的a&bIntegers 进行比较时,即使它们是不同的对象,它也会返回true.

从机制上讲,这种缓存带来了哪些性能优势?根据这个答案,"目的主要是为了节省内存,由于更好的缓存效率,这也可以带来更快的代码." 它如何导致更快的代码?我如何使用此功能来提高我编写的实际代码的性能?

它与类中的以下方法有什么关系IntegerCache吗?

public static Integer valueOf(int i) {
    assert IntegerCache.high >= 127;
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}
Run Code Online (Sandbox Code Playgroud)

java performance autoboxing caching

1
推荐指数
1
解决办法
264
查看次数

为什么Object []存储原语?

Object[]可以存储来自任何类的任何对象,因为Java中的每个类都会扩展java.lang.Object.

我不认为原语会延伸Object,为什么我们可以将它们存储起来如下?

Object[] obj_arr = {1, 2, 1.2, 'a', false, new MyClass(), null};
Run Code Online (Sandbox Code Playgroud)

问题是为什么原语可以存储在Object数组中并且在上面的代码中是否发生了自动装箱

java primitive autoboxing

1
推荐指数
1
解决办法
250
查看次数

可以做些什么来避免在使用 Records 时出现由于自动装箱而导致的隐藏错误

有时我会编写一些小脚本,用于管理数据库中的记录或生成一些用于报告目的的数据。

大多数时候我们使用Long类型作为用户实体的 ID。如果我执行以下操作:

List<Long> listOfLong = Arrays.asList(1L, 2L, 3L);
System.out.println(listOfLong.contains(2));
Run Code Online (Sandbox Code Playgroud)

它返回,false但为此:

System.out.println(integers.contains(2L));
Run Code Online (Sandbox Code Playgroud)

它返回true

我们不应该得到这样的编译时错误吗?

java autoboxing java-8

1
推荐指数
1
解决办法
98
查看次数

自动装箱和强制有什么区别?

我用Java,C和Python编程.

算术类型之间的自动强制规则已得到扩充,以处理更丰富的类型集

资料来源:"C编程语言"

但"强制"是什么意思呢?答案说它就像类型转换和隐式转换和隐式类型转换,并在我阅读它时称为自动装箱.那么自动装箱和强制之间的区别是什么?

谢谢

c java autoboxing coercion type-coercion

0
推荐指数
2
解决办法
7717
查看次数

如何确保==将始终使用基元作为相等测试

根据我的理解,如果我有两个long或者int,==由于自动装箱,测试值相等的运算符有时不起作用.

我需要做些什么来确保==在处理原语时能够在每种可能的情况下工作?

java primitive autoboxing equality equals

0
推荐指数
1
解决办法
165
查看次数

java:自动装箱和铸造?

我对一个小问题感到困惑,请参阅以下内容:

Double j = new Double(5); // No problem.
double j =5;//

         //But

//Here the problem:

Double j = 5;
Long k =5;      
Float g = 5.0;
Run Code Online (Sandbox Code Playgroud)

我知道解决方案,但我想理解为什么在某些情况下,演员是隐式完成而在其他情况下不是.

java autoboxing

0
推荐指数
1
解决办法
901
查看次数

为什么盒装基元不支持所有运算符?

看着有效的Java视频我注意到,仅支持六个比较符至极四个盒装原语类型<,>,<=,>=,不支持==!=.

我的问题是为什么盒装基元不支持所有运算符?

java autoboxing

0
推荐指数
1
解决办法
44
查看次数