当我遇到Joel Spolsky时,我正在阅读更多关于Joel on Software的文章,说明一种特定类型的程序员知道a 和Java/C#(面向对象编程语言)之间的区别.intInteger
那么区别是什么呢?
我知道,如果你将盒装原始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)
?
以下代码抛出NullPointerException:
int num = Integer.getInteger("123");
Run Code Online (Sandbox Code Playgroud)
我的编译器是否getInteger在null上调用,因为它是静态的?这没有任何意义!
发生了什么?
请考虑以下代码段:
int i = 99999999;
byte b = 99;
short s = 9999;
Integer ii = Integer.valueOf(9); // should be within cache
System.out.println(new Integer(i) == i); // "true"
System.out.println(new Integer(b) == b); // "true"
System.out.println(new Integer(s) == s); // "true"
System.out.println(new Integer(ii) == ii); // "false"
Run Code Online (Sandbox Code Playgroud)
很明显为什么最后一行总是打印出来"false":我们正在使用==引用标识比较,而new对象永远不会是==已经存在的对象.
问题是前三行:那些比较保证在原语上int,Integer自动取消装箱?是否存在基元将被自动装箱的情况,并且执行参考标识比较?(那就是全部false!)
while循环中的off-by-one错误究竟是什么?我如何解决它以及如何解决它?谢谢
我正在尝试计算(360/24)/ 60当我得到0.25时,我一直得到答案0.0
用语言:我想将360除以24,然后将结果除以60
public class Divide {
public static void main(String[] args){
float div = ((360 / 24) / 60);
System.out.println(div);
}
}
Run Code Online (Sandbox Code Playgroud)
打印出:
0.0
这是为什么?我做了一些非常愚蠢的事情,还是有充分理由这样做
请演示三元运算符如何使用常规if/else块.例:
Boolean isValueBig = value > 100 ? true : false;
Run Code Online (Sandbox Code Playgroud)
完全重复: 如何使用三元运算符?
我是Java的新手.在编写Map <>时,我发现声明Map<int, int>是语法错误,而且没问题Map<Integer, Integer>.是否只能在Java中实例化对象类型的泛型,而不是原语?如果是这样,基元的装箱/拆箱会有明显的性能损失吗?
参考:http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html
"如果你的程序尝试autounbox null,它将抛出NullPointerException."
如果尝试将null赋给布尔值,javac将给出编译时错误.说得通.尽管如此,将null赋给布尔值也是如此.我猜也是有道理的.
但是让我们考虑一下这样一个事实:当你尝试autounbox null时你会得到一个NPE.这意味着你不能在没有空值检查或异常处理的情况下安全地对布尔值执行布尔运算.在整数上进行数学运算也是如此.
很长一段时间,我是java1.5 +中自动装箱的粉丝,因为我认为它让java更接近真正的面向对象.但是,昨晚遇到这个问题之后,我得说我认为这很糟糕.当我尝试使用未初始化的原语时,编译器给我一个错误是一件好事.如果我输了,我不想使用自动装箱.
我想我可能误解了自动装箱的问题,但与此同时我永远不会接受布尔值应该能够有3个值.谁有人解释这个?我没有得到什么?
java ×9
autoboxing ×5
integer ×3
c# ×2
api-design ×1
c ×1
casting ×1
comparison ×1
division ×1
generics ×1
int ×1
primitive ×1
unboxing ×1
while-loop ×1
wrapper ×1