Tag: autoboxing

比较加框的长值127和128

我想使用if条件比较两个Long对象值。 当这些值小于128时 , if条件正常工作,但当它们大于或等于128时 ,比较失败。 例: Long num1 = 127; Long num2 = 127; if (num1 == num2) { // Works ok } 上面的代码比较正常,但在下面的代码中失败: Long num1 = 128; Long num2 = 128; if (num1 == num2) { // Does NOT work } 为什么比较Long变量和大于127的值存在问题? 如果变量数据类型更改为长基元 ,则比较适用于所有情况。

我创建的类可以进行自动装箱吗?

有没有办法为我创建的类使用自动装箱? 例如,我有Number这个子类。 public class UnsignedInteger extends Number { int n; public UnsignedInteger(int n) { if(n >= 0) this.n = n; else throw new IllegalArgumentException(“Only positive integers are supported”); } } 现在, UnsignedInteger i = new UnsignedInteger(88); 工作得很好,但有没有办法进行编译: UnsignedInteger i = 88; ? 它不适合我。 提前致谢!

为什么不在Java中缓存整数?

我知道这个主题有类似的post ,但它们并没有完全解决我的问题。 当你这样做时: Integer a = 10; Integer b = 10; System.out.println(“a == b: ” + (a == b)); 这将(显然)在大多数情况下打印为true ,因为[-128,127]范围内的整数以某种方式被缓存。 但: Integer a = new Integer(10); Integer b = new Integer(10); System.out.println(“a == b: ” + (a == b)); 将返回false 。 我理解我要求Integer的新实例,但由于盒装原语在Java中是不可变的,并且机器已经在那里做“正确的事情”(如第一种情况所示),为什么会发生这种情况? 如果一个带有10的Integer的所有实例在内存中都是同一个对象,那会不会更有意义? 换句话说,为什么我们没有“整数实习”,这类似于“字符串实习”? 更好的是,如果表示同一事物的盒装基元的实例( 无论值(和类型)是否为同一个对象) ,它会更有意义吗? 或者至少正确回应== ?

java自动装箱/拆箱如何工作?

从JDK 5.0开始,在java中引入了自动装箱/拆箱function,这个技巧简单而有用,但是当我开始测试包装器类和原始类型之间的不同转换时,我真的很困惑,例如自动装箱的概念在java中是如何工作的,例如: 拳击 int intValue = 0; Integer intObject = intValue; byte byteValue = 0; intObject = byteValue; // ==> Error 在尝试不同的情况( short , long , float , double )之后,编译器接受的唯一情况是当effectation运算符右边的值的类型为int 。 当我查看Integer.class的源代码时,我发现它只实现了一个带有int参数的构造函数。 所以我的结论是自动装箱的概念是基于包装类中实现的构造函数。 我想知道这个结论是否属实,还是有自动拳击使用的另一个概念? 拆箱 Integer intObject = new Integer(0); byte byteValue = intObject; // ==> Error (the same Error with short) int intValue = […]