我知道,如果你将盒装原始Integer与常量进行比较,例如:
Integer a = 4;
if (a < 5)
Run Code Online (Sandbox Code Playgroud)
a 将自动取消装箱,比较将起作用.
但是,当您比较两个盒装Integers并希望比较相等或小于/大于?时会发生什么?
Integer a = 4;
Integer b = 5;
if (a == b)
Run Code Online (Sandbox Code Playgroud)
以上代码是否会导致检查它们是否是同一个对象,还是会在这种情况下自动取消装箱?
关于什么:
Integer a = 4;
Integer b = 5;
if (a < b)
Run Code Online (Sandbox Code Playgroud)
?
我刚刚看到类似这样的代码:
public class Scratch
{
public static void main(String[] args)
{
Integer a = 1000, b = 1000;
System.out.println(a == b);
Integer c = 100, d = 100;
System.out.println(c == d);
}
}
Run Code Online (Sandbox Code Playgroud)
运行时,这段代码将打印出来:
false
true
Run Code Online (Sandbox Code Playgroud)
我理解为什么第一个是false:因为这两个对象是单独的对象,所以==比较引用.但我无法弄清楚,为什么第二个声明会回来true?当Integer的值在一定范围内时,是否会出现一些奇怪的自动装箱规则?这里发生了什么?
在查看Integer.parseInt(String s, int radix)(java 8,1.8.0_131)的源代码时,我发现了以下注释块:
/*
* WARNING: This method may be invoked early during VM initialization
* before IntegerCache is initialized. Care must be taken to not use
* the valueOf method.
*/
Run Code Online (Sandbox Code Playgroud)
虽然我理解了关于IntegerCache的第一部分,但我不明白为什么会出现这样的警告valueOf,以及为什么会出现这种情况.
我看到这valueOf()依赖parseInt(),但我仍然不明白为什么会有这个警告.
有人可以解释一下这个评论的确切含义(以及不应该使用valueOf的上下文),以及可能出现的问题.
编辑:
Integer.valueOf(int i)中的代码似乎已经改变,因为下面的评论中的其他问题被问到,现在是
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
Run Code Online (Sandbox Code Playgroud)
并且应该从之前的断言错误中保存.
我是一个新手Java编码器,我只是读取一个整数类的变量,可以在API中描述三种不同的方式.我有以下代码:
if (count.compareTo(0)) {
System.out.println(out_table);
count++;
}
Run Code Online (Sandbox Code Playgroud)
这是一个循环,只是输出out_table.
我的目标是弄清楚如何查看整数值count > 0.
我意识到这count.compare(0)是正确的方法吗?或者是count.equals(0)吗?
我知道这count == 0是不正确的.这是正确的吗?它的价值比较运算符在哪里count=0?
private static HashMap<Integer, Bitmap> mBitmapCache;
mBitmapCache.put(R.drawable.bg1,object);
Run Code Online (Sandbox Code Playgroud)
R.drawable.bg1是int...但我想转换成Integer因为Hashmap采用Integer...并且在几秒内绘制多个对象时,它会创建一个影响代码性能的整数对象运行时...
我找到了一篇旧帖子,但没有说明我对Wrapper Classes使用的设计模式的理解,而且,从维基百科阅读时我没有得到任何明确的信息.
包装类是否真的使用任何设计模式?
如果使用模式,那么其模式是它的这些:Decorator Pattern,Facade Pattern或Adapter Pattern?
可能重复:
奇怪的Java拳击
嗨,
有人可以解释为什么最后一个打印返回false吗?
int a = 100;
int b = 100;
System.out.println(a == b); // prints true
Integer aa = 100;
Integer bb = 100;
System.out.println(aa == bb); // prints true
Integer aaa = 1000;
Integer bbb = 1000;
System.out.println(aaa == bbb); // prints false
Run Code Online (Sandbox Code Playgroud)
谢谢迈克尔
我需要创建一个记录两列{int,String}的List.我认为ArrayList是我需要的,但我无法理解它.我从数据库中提取了字符串,而int是我需要识别字符串位置以供日后使用的索引值.
List<List<String>> strArray = ArrayList<List<String>>;
然后我可以为我从数据库中提取的每一行执行类似strArray.add().add()的操作吗?
我接受了缓刑求职面试(?我不确定这是不是这个词),面试官让我告诉他结构和班级之间有什么区别.
所以我告诉了我所知道的一切以及我在msdn上读过的所有内容.
那家伙说"不够",我没有任何线索.所以他说:
结构是优化的,所以如果有和整数和浮点数,它们有一些相同的咬合,那么它将保存这个空间,所以struct with
int=0和float=0size的一半int=int.MAX,float=float.MIN.
好的.所以我很喜欢 - 没听说过.
但接下来,在采访之后我正在思考它并且它对我来说并没有多大意义.这意味着,当我们改变其中某个变量的值时,结构大小会有所不同.并且它不能真正存在于内存中,如果在扩展时发生碰撞会怎么样.而且我们必须写一些我们正在滑动的位,不确定它是否会给出任何优化.
另外,他在乞讨时问我,Java中的struct和class有什么不同.我已经回答过,Java中没有结构,他说"不是程序员,而是数字类型是结构"我有点像WTF.
基本上问题是:
这个家伙知道的是什么,这很难被了解(我的意思是,我在网上寻找它,找不到东西)
或许他对自己的工作一无所知,并试图在面试时看起来很酷.
在Integer class,有private static class IntegerCache.
这门课有什么用?
使用时如何受益Integer?