相关疑难解决方法(0)

Java的一元加运算符的目的是什么?

Java的一元加运算符似乎来自C,通过C++.

int result = +1;   
Run Code Online (Sandbox Code Playgroud)

它似乎有以下影响:

  • 如果它是包装器对象,则将其操作数取消装箱
  • int如果它不是已经int或更宽,则提升其操作数
  • 稍微复杂化包含大量连续加号的邪恶表达式的解析

在我看来,有更好/更清晰的方法来做所有这些事情.

这个SO问题中,关于C#中的对应运算符,有人说"如果你觉得有必要,它就会超载".

但是,在Java中,不能超载任何运算符.那么这个一元加运算符是否只存在于Java中,因为它存在于C++中?

java unary-operator language-history

36
推荐指数
3
解决办法
7020
查看次数

我如何比较两个整数?

我必须比较两个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)

有点冗长......

编辑:谢谢你的回复.虽然我知道现在要做什么,事实是分布在所有现有的答案(甚至是已删除的答案:)),我真的不知道,接受哪一个.所以我会接受最好的答案,它指的是所有三种比较可能性,或者至少是前两种.

java comparison object-comparison

34
推荐指数
5
解决办法
16万
查看次数

比较整数对象

我有以下代码:

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)

java oop object

31
推荐指数
2
解决办法
3万
查看次数

是否保证Java中的新Integer(i)== i?

请考虑以下代码段:

    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 comparison autoboxing implicit-conversion

25
推荐指数
2
解决办法
3008
查看次数

NullPointerException,在三元表达式中具有自动装箱功能

运行以下Java代码:

boolean b = false;
Double d1 = 0d;
Double d2 = null;
Double d = b ? d1.doubleValue() : d2;
Run Code Online (Sandbox Code Playgroud)

为什么会出现NullPointerException?

java autoboxing nullpointerexception

23
推荐指数
2
解决办法
6343
查看次数

Java:比较不同的double和Double

我知道这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直接比较错误.请解释一下.

谢谢 :)

java double

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

在Java 7中比较Object和int

我是一名高级解决方案架构师,但我最近偶然发现了一个让我停下来思考的问题......

对我来说,下面的代码总是应该触发错误,但当我的一位同事问我为什么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 eclipse autoboxing compare java-7

15
推荐指数
1
解决办法
1321
查看次数

+运算符对Java中的数字和字符串的行为有何不同?

Java没有运算符重载的概念.

Still +运算符表现为带数字的加法运算符,并将运算符与字符串连接起来.这类似于运算符重载行为.

那么,Java是否有运算符重载?

java

13
推荐指数
4
解决办法
843
查看次数

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)

谢谢迈克尔

java operators

10
推荐指数
1
解决办法
590
查看次数

32位JVM和64位JVM之间的Integer.MAX_VALUE有区别吗?

Integer.MAX_VALUE32位JVM和64位JVM之间的值是不同的?

我正在使用32位JDK编译Java类并将其部署在64位机器上.我只是想确保我可以依靠检测if (aNumber == Integer.MAX_VALUE).

java integer

10
推荐指数
2
解决办法
6802
查看次数