相关疑难解决方法(0)

为什么人们仍然在Java中使用原始类型?

从Java 5开始,我们已经对原始类型进行了装箱/拆箱,因此它int被包装成java.lang.Integer等等.

我最近看到了很多新的Java项目(肯定需要一个至少版本为5的JRE,如果不是6个),int而不是java.lang.Integer使用后者,尽管使用后者要方便得多,因为它有一些帮助方法可以转换到long的值等.

为什么有些人仍然在Java中使用原始类型?有什么实际好处吗?

java primitive autoboxing jdk1.5 primitive-types

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

使用int vs Integer

我遇到了一个使用Integer变量的类来捕获要在for循环中使用的大小.这是一个好的做法还是我们应该使用int原始数据类型?

Integer size = something.getFields().size();
for (Integer j = 0; j < size - 1; ++j) 
Run Code Online (Sandbox Code Playgroud)

java int primitive integer

55
推荐指数
4
解决办法
6万
查看次数

在Java中使用==运算符来比较包装器对象

我正在阅读Kathy Sierra和Bert Bates的SCJP Java 6,这本书让我很困惑.在页245上,他们在下面说明以下代码.

Integer i1 = 1000;
Integer i2 = 1000;
if(i1 != i2)
System.out.println("different objects");

//Prints output
different objects
Run Code Online (Sandbox Code Playgroud)

然后在下一页上,他们有以下代码

Integer i3 = 10;
Integer i4 = 10;
if(i3 == i4)
System.out.println("same objects");

//Prints output
same objects
Run Code Online (Sandbox Code Playgroud)

我很困惑!当我自己尝试这个时,似乎你不能使用==来比较你使用equals()方法的方式.即使整数变量设置为相同的值(即10),使用==总是给我'假'.我对么?使用==来比较相同的Integer对象(具有相同的值)将始终导致'false'

java integer equals wrapper operator-keyword

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

为什么Java没有看到整数是平等的?

我有应该是相等的整数(我通过输出验证它).但在我的if条件下,Java并没有看到这些变量具有相同的值.

我有以下代码:

if (pay[0]==point[0] && pay[1]==point[1]) {
    game.log.fine(">>>>>> the same");
} else {
    game.log.fine(">>>>>> different");
}
game.log.fine("Compare:" + pay[0] + "," + pay[1] + " -> " + point[0] + "," + point[1]);
Run Code Online (Sandbox Code Playgroud)

它产生以下输出:

FINE: >>>>>> different
FINE: Compare:: 60,145 -> 60,145
Run Code Online (Sandbox Code Playgroud)

可能我必须添加这样point定义:

Integer[] point = new Integer[2];
Run Code Online (Sandbox Code Playgroud)

并且pay我们从环路构造采取:

for (Integer[] pay : payoffs2exchanges.keySet())
Run Code Online (Sandbox Code Playgroud)

因此,这两个变量都具有整数类型.

java comparison if-statement equals

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

使用新运算符在Java中进行整数缓存

在下面的类中,我试图将包装器类与原始类进行比较,但结果不同。

我检查了以下链接链接

更为有趣的问题是,为什么new Object();每次都需要创建一个唯一实例?即为什么new Object();不允许缓存?答案是wait(...)notify(...)。缓存new Object()会错误地导致线程在不应该同步时彼此同步。

如果有一个新的对象,然后是如何ac平等的吗?

如果b等于cc等于aa则应等于b。但在以下情况下,我得到了a != c

请解释。

class WrapperCompare {

    public static void main (String args[]) {
        Integer a = new Integer(10);    
        Integer b = 10; 
        int c=10;
        System.out.println(b==c);       //true
        System.out.println(a==b);       //false
        System.out.println(a==c);       //true
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:通过引用此链接Integer caching

基本上,Integer类会将Integer实例的缓存保留在-128到127的范围内,并且所有自动装箱,文字和Integer.valueOf()的使用都会从该缓存返回其覆盖范围内的实例。

因此,在这种情况下,所有语句都应为真。

java equals instance

23
推荐指数
1
解决办法
1401
查看次数

Java整数自动自动装箱

我在Java(JDK 1.7)中偶然发现了这个:

    Integer a = 100;
    Integer b = 100;
    Integer c = 1000;
    Integer d = 1000;

    System.out.println(a == b); //true
    System.out.println(c == d); //false
    System.out.println(new Integer(100) == new Integer(100)); //false
    System.out.println(new Integer(1000) == new Integer(1000)); //false
Run Code Online (Sandbox Code Playgroud)

输出为:true false false false

为什么== b评估为真?这是什么原因?这类似于String内化吗?

java autoboxing integer

3
推荐指数
1
解决办法
2116
查看次数

在 Java 中缓存装箱值

我有以下代码:

Integer first = new Integer(4);
Integer second = new Integer(4);
System.out.println(first == second);
Integer third = 4;
System.out.println(first == third);
System.out.println(second == third);
Run Code Online (Sandbox Code Playgroud)

由于 4 介于 -128 到 127 之间,我希望包装 4 的 Integer 对象在第一次创建后就被缓存,然后为其他装箱语句返回,因此 '==' 检查必须返回 true。但对于以上三种情况,它总是错误的。

为什么会这样?

java autoboxing

3
推荐指数
1
解决办法
123
查看次数

Java,如何通过引用传递

看看这段代码

Integer x = 5;
Integer y = 2;
Integer xy = x+y;
System.out.println("xy = " + xy); // outputs: 7
System.out.println("xy2 = " + xy2); // outputs: 7

x++;

System.out.println("xy = " + xy); // outputs: 7
System.out.println("xy2 = " + xy2); // outputs: 7
Run Code Online (Sandbox Code Playgroud)

如何在不使用为您计算代码的方法的情况下输出代码8?

java variables pass-by-reference

2
推荐指数
1
解决办法
122
查看次数

java中的每个Object都有自己的构造函数吗?

这个问题是因为我阅读了这一行.通过调用构造函数方法创建了一个对象的新实例. 我是agrre但构造函数的方法是什么..?一个OObject或一个类本身..?..抱歉,如果它是一个业余问题,但我还在学习java,我发现它很难理解.

这让我想起哪个是第一只鸡还是鸡蛋..?

编辑:

可能是我的问题不明确,我知道如何创建对象,每个类都有一个构造函数,但我想知道的是,堆中的每个对象都有自己的实例变量副本.以同样的方式,他们也会有一个带有它们的构造函数或者它只是类只有类的东西.

java constructor

0
推荐指数
1
解决办法
4279
查看次数

在Java中使用Primitive Wrapper类

将Integer声明为两种方式之间有什么区别吗?

Integer Age = 25;
Integer Age = new Integer(25); 
Run Code Online (Sandbox Code Playgroud)

java

0
推荐指数
1
解决办法
195
查看次数