标签: autoboxing

"a <= b && b <= a && a!= b"怎么样?

这是代码,我必须弄清楚它是如何可能的.我有一个线索,但我不知道该怎么做.我认为它是负数和正数,也可能是变量修饰语.我是初学者,我到处寻找解决方案,但我找不到任何可用的东西.

问题是:你需要声明并初始化这两个变量.if条件必须为true.

代码:

if( a <= b && b <= a && a!=b){
       System.out.println("anything...");
}
Run Code Online (Sandbox Code Playgroud)

我很感谢你抽出时间.

java autoboxing loops if-statement

53
推荐指数
3
解决办法
3152
查看次数

当使用==表示基元和盒装值时,自动装箱完成,或者取消装箱完成

以下代码编译(使用Java 8):

Integer i1 = 1000;
int i2 = 1000;
boolean compared = (i1 == i2);
Run Code Online (Sandbox Code Playgroud)

但是它做了什么?

取消框i1:

boolean compared = (i1.intvalue() == i2);
Run Code Online (Sandbox Code Playgroud)

或盒子i2:

boolean compared = (i1 == new Integer(i2));
Run Code Online (Sandbox Code Playgroud)

那么它是按比例比较两个Integer对象(通过引用)还是两个int变量?

请注意,对于某些数字,因为Integer类维护值之间的内部缓存中的基准比较将产生正确的结果-128127(见也TheLostMind注释).这就是我1000在我的例子中使用的原因以及为什么我特别询问拆箱/装箱而不是比较的结果.

java autoboxing

53
推荐指数
3
解决办法
8314
查看次数

为什么Java自动装箱不会扩展到自动装箱类型方法的方法调用?

我想将原语转换为字符串,我试过:

myInt.toString();
Run Code Online (Sandbox Code Playgroud)

这失败并出现错误:

int cannot be dereferenced
Run Code Online (Sandbox Code Playgroud)

现在,我得到的原语不是引用类型(即不是Object),所以不能有方法.然而,Java 5引入了自动装箱和拆箱(一个C#......我在C#中从未喜欢过,但这不是重点).因此,使用自动装箱,我希望上面的内容将myInt转换为Integer,然后调用toString().

此外,我相信C#允许这样的电话,除非我记错了.这只是Java自动装箱/拆箱规范的一个不幸的缺点,还是有充分的理由呢?

java autoboxing

51
推荐指数
5
解决办法
5909
查看次数

autoboxing是否调用valueOf()?

我正在尝试确定以下语句是否保证是真的:

((Boolean)true) == Boolean.TRUE
((Boolean)true) == Boolean.valueOf(true)
((Integer)1) == Integer.valueOf(1)
Run Code Online (Sandbox Code Playgroud)

我一直认为自动装箱相当于调用valueOf()相应的类型.我在这个主题上看到的每一个讨论似乎都支持我的假设.但我在JLS中找到的只有以下内容(§5.1.7):

如果该值p被装箱是整数文本类型的int之间-128127包容性(§3.10.1)或布尔值truefalse(§3.10.3),或字符之间文字'\u0000''\u007f'包容性(§3.10.4),然后让ab是任何两个拳击转换的结果p.情况总是如此a == b.

这描述的行为*相似valueOf().但似乎没有任何valueOf()实际调用的保证,这意味着理论上可以有一个实现为自动装箱值保留一个单独的专用缓存.在这种情况下,缓存的自动装箱值与常规缓存的装箱值之间可能不存在标识相同性.

Oracle的自动装箱教程说明了li.add(i)编译到的事实li.add(Integer.valueOf(i)),其中i是一个int.但我不知道该教程是否应被视为权威来源.


*这是一个稍微弱一点的保证valueOf(),因为它只是指字面值.

java autoboxing boxing

50
推荐指数
2
解决办法
2481
查看次数

Java中字符串和整数的空值

public class Test {
    public static void main(String[] args) {

        String s = null;
        String s1 = null;
        Integer i = null;
        Integer i1 = null;

        System.out.println(s+i);
        System.out.println(i+s);
        System.out.println(s+s1);

        try {
            System.out.println(i+i1);
        } catch (NullPointerException np) {         
            System.out.print("NullPointerException");       
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

问题很简单 - 为什么我NullPointerException只收到最后一行?

java string autoboxing nullpointerexception addition

49
推荐指数
3
解决办法
7504
查看次数

说一个类型是"盒装"是什么意思?

我听说在某些语言中被称为"盒装"的类型.

在Java中,我听说过"autoboxing".这是什么?它是否有类型的包装类?如果我使用盒装或非盒装类型,我的代码会如何变化?

java autoboxing types type-systems terminology

44
推荐指数
4
解决办法
2万
查看次数

Java将Arraylist <Float>转换为float []

我怎么能这样做?

我有一个arraylist,有浮动元素. (Arraylist <Float>)

(float[]) Floats_arraylist.toArray()
Run Code Online (Sandbox Code Playgroud)

它不起作用.

无法从Object []转换为float []

java arrays autoboxing casting arraylist

42
推荐指数
3
解决办法
7万
查看次数

为什么在Scala的标准库中@specialized的东西很少?

我搜索了@specializedScala 2.8.1标准库的源代码中的用法.它看起来像只性状一把类使用此批注:Function0,Function1,Function2,Tuple1,Tuple2,Product1,Product2,AbstractFunction0,AbstractFunction1,AbstractFunction2.

没有集合类@specialized.为什么不?这会产生太多的课程吗?

这意味着使用具有基本类型的集合类是非常低效的,因为将会有大量不必要的装箱和拆箱.

拥有s 的不可变列表或序列(具有IndexedSeq特征)的最有效方法是什么Int,避免装箱和拆箱?

collections performance autoboxing scala specialized-annotation

38
推荐指数
3
解决办法
5727
查看次数

为什么autoboxing会在Java中使一些调用变得模棱两可?

我今天注意到自动装箱有时会导致方法重载分辨率的模糊.最简单的例子似乎是这样的:

public class Test {
    static void f(Object a, boolean b) {}
    static void f(Object a, Object b) {}

    static void m(int a, boolean b) { f(a,b); }
}
Run Code Online (Sandbox Code Playgroud)

编译时,会导致以下错误:

Test.java:5: reference to f is ambiguous, both method
    f(java.lang.Object,boolean) in Test and method
    f(java.lang.Object,java.lang.Object) in Test match

static void m(int a, boolean b) { f(a, b); }
                                  ^
Run Code Online (Sandbox Code Playgroud)

修复此错误很简单:只使用显式自动装箱:

static void m(int a, boolean b) { f((Object)a, b); }
Run Code Online (Sandbox Code Playgroud)

这正确地按预期正确调用第一个重载.

那么为什么重载决策失败了呢?为什么编译器没有自动包装第一个参数,并正常接受第二个参数?为什么我必须明确请求自动装箱?

java compiler-construction autoboxing overloading

34
推荐指数
2
解决办法
5869
查看次数

布尔值!= false

在Java中,你通常会说

if(someBool != false)

是相同的

if(someBool)

但是,如果someBool不是类型,booleanBoolean它的价值是null什么?

java autoboxing boolean

33
推荐指数
3
解决办法
4万
查看次数