Java的一元加运算符似乎来自C,通过C++.
int result = +1;
Run Code Online (Sandbox Code Playgroud)
它似乎有以下影响:
int如果它不是已经int或更宽,则提升其操作数在我看来,有更好/更清晰的方法来做所有这些事情.
在这个SO问题中,关于C#中的对应运算符,有人说"如果你觉得有必要,它就会超载".
但是,在Java中,不能超载任何运算符.那么这个一元加运算符是否只存在于Java中,因为它存在于C++中?
我必须比较两个Integer对象(不是int).比较它们的规范方法是什么?
Integer x = ...
Integer y = ...
Run Code Online (Sandbox Code Playgroud)
我能想到这个:
if (x == y)
Run Code Online (Sandbox Code Playgroud)
该==运营商只比较基准,因此这将仅适用于较低的整数值工作.但也许自动拳击踢......?
if (x.equals(y))
Run Code Online (Sandbox Code Playgroud)
这看起来像是一项昂贵的操作.是否有以这种方式计算的哈希码?
if (x.intValue() == y.intValue())
Run Code Online (Sandbox Code Playgroud)
有点冗长......
编辑:谢谢你的回复.虽然我知道现在要做什么,事实是分布在所有现有的答案(甚至是已删除的答案:)),我真的不知道,接受哪一个.所以我会接受最好的答案,它指的是所有三种比较可能性,或者至少是前两种.
我有以下代码:
public class Test {
public static void main(String[] args) {
Integer alpha = new Integer(1);
Integer foo = new Integer(1);
if(alpha == foo) {
System.out.println("1. true");
}
if(alpha.equals(foo)) {
System.out.println("2. true");
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
2. true
Run Code Online (Sandbox Code Playgroud)
但是,更改Integer objectto 的类型int将产生不同的输出,例如:
public class Test {
public static void main(String[] args) {
Integer alpha = new Integer(1);
int foo = 1;
if(alpha == foo) {
System.out.println("1. true");
}
if(alpha.equals(foo)) {
System.out.println("2. true");
}
}
}
Run Code Online (Sandbox Code Playgroud)
新输出:
1. …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码段:
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!)
运行以下Java代码:
boolean b = false;
Double d1 = 0d;
Double d2 = null;
Double d = b ? d1.doubleValue() : d2;
Run Code Online (Sandbox Code Playgroud)
为什么会出现NullPointerException?
我知道这Double是一个包装类,它包装了double数字.今天,我看到了另一个主要区别:
double a = 1.0;
double b = 1.0;
Double c = 1.0;
Double d = 1.0;
System.out.println(a == b); // true
System.out.println(c == d); // false
Run Code Online (Sandbox Code Playgroud)
对我这么奇怪!!!
所以,如果我们Double每次使用,我们必须做这样的事情:
private static final double delta = 0.0001;
System.out.println(Math.abs(c-d) < delta);
Run Code Online (Sandbox Code Playgroud)
我无法解释为什么Double直接比较错误.请解释一下.
谢谢 :)
我是一名高级解决方案架构师,但我最近偶然发现了一个让我停下来思考的问题......
对我来说,下面的代码总是应该触发错误,但当我的一位同事问我为什么Eclipse没有显示错误时,我无法回答任何问题.
class A {
public static void main(String... args) {
System.out.println(new Object() == 0);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经调查过,发现在源级别为1.6时确实会抛出一个错误:
incomparable types: Object and int
Run Code Online (Sandbox Code Playgroud)
但现在在1.7中编译好了.
请问,有哪些新功能可以保证这种行为?
Java没有运算符重载的概念.
Still +运算符表现为带数字的加法运算符,并将运算符与字符串连接起来.这类似于运算符重载行为.
那么,Java是否有运算符重载?
可能重复:
奇怪的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)
谢谢迈克尔
Integer.MAX_VALUE32位JVM和64位JVM之间的值是不同的?
我正在使用32位JDK编译Java类并将其部署在64位机器上.我只是想确保我可以依靠检测if (aNumber == Integer.MAX_VALUE).