相关疑难解决方法(0)

什么是Java String interning?

什么是Java中的String Interning,何时应该使用它,为什么?

java string string-interning

219
推荐指数
5
解决办法
10万
查看次数

使用java.lang.String.intern()是一种好习惯吗?

Javadoc关于String.intern()没有提供太多细节.(简而言之:它返回字符串的规范表示,允许使用内部字符串进行比较==)

  • 我何时会使用此功能String.equals()
  • 是否存在Javadoc中未提及的副作用,即JIT编译器或多或少的优化?
  • 有进一步的用途String.intern()吗?

java string

193
推荐指数
8
解决办法
6万
查看次数

"text"和new String("text")之间有什么区别?

这两个陈述之间有什么区别?

String s = "text";

String s = new String("text");
Run Code Online (Sandbox Code Playgroud)

java string

187
推荐指数
4
解决办法
7万
查看次数

当比较Java中的Integer包装器时,为什么128 == 128 false但127 == 127为真?

class D {
    public static void main(String args[]) {
        Integer b2=128;
        Integer b3=128;
        System.out.println(b2==b3);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

false
Run Code Online (Sandbox Code Playgroud)
class D {
    public static void main(String args[]) {
        Integer b2=127;
        Integer b3=127;
        System.out.println(b2==b3);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

true
Run Code Online (Sandbox Code Playgroud)

注意:-128到127之间的数字为真.

java comparison integer pass-by-reference pass-by-value

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

什么是Java字符串池以及"s"与新String("s")有何不同?

String Pool是什么意思?以下声明之间有什么区别:

String s = "hello";
String s = new String("hello");
Run Code Online (Sandbox Code Playgroud)

JVM存储这两个字符串有什么区别吗?

java string

111
推荐指数
5
解决办法
6万
查看次数

将Integers与==进行比较究竟做了什么?

编辑:好的,好的,我误读了.我不是将int与Integer进行比较.正好指出.

我的SCJP书说:

当==用于将基元与包装器进行比较时,包装器将被解包,并且比较将是原始的.

所以你认为这段代码会打印出来true:

    Integer i1 = 1; //if this were int it'd be correct and behave as the book says.
    Integer i2 = new Integer(1);
    System.out.println(i1 == i2);
Run Code Online (Sandbox Code Playgroud)

但它打印出来false.

另外,根据我的书,这应该打印true:

Integer i1 = 1000; //it does print `true` with i1 = 1000, but not i1 = 1, and one of the answers explained why.
Integer i2 = 1000;
System.out.println(i1 != i2);
Run Code Online (Sandbox Code Playgroud)

不.是的false.

是什么赋予了?

java compare wrapper

11
推荐指数
3
解决办法
3410
查看次数

Integer实例变量上的线程同步

public class Main{
    public static void main(String[] args) throws Exception {
        // Creating objects for class Check(2 different objects)
        Check c = new Check("s1");
        Check c1 = new Check("s2");
        c.start();c1.start();
   }
}
class Check extends Thread{
    Check(String name){super(name);}
    private Integer ab = 2;
    public void run(){
        synchronized (ab) {
            System.out.println(Thread.currentThread().getName());
            for(int i=0;i<10;i++)System.out.print(i+" ");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这里我已经对变量ab进行了同步.我已经创建了两个不同的类Check实例,但是我总是得到s1的输出,然后是s2,反之亦然,但是没有混合,为什么会这样呢?当我已经创建了两个单独的对象(在main中),那么两个不同的线程,两个不同的ab变量,那么它如何成为两个不同对象的共享资源?

java multithreading thread-safety

11
推荐指数
1
解决办法
1024
查看次数

Java整数池.为什么?

我到处都读到,当你在Java中定义-128到127之间的整数时,它不是创建一个新对象,而是返回一个已创建的对象.

除了让新手程序员比较Integer对象==以查看它们是否是相同的数字之外,我认为没有任何其他的做法,但我认为这很糟糕,因为他们确实认为他们可以比较任何整数==,并且也是教学任何编程语言的不良做法:比较两个"不同"对象的内容==.

为什么要这样做还有其他原因吗?或者在设计语言时(在我看来)像JavaScript中的可选分号一样,这只是一个错误的决定?

编辑:我在这里看到他们解释了行为:为什么整数常量池的行为在127处变化?

我问为什么他们设计它有这种行为,而不是为什么这种行为发生.

java object-comparison

5
推荐指数
1
解决办法
3100
查看次数

Java 整数类型常量声明 - 原语还是对象?

在 Java 中,通过对象方式声明的 int 常量有什么好处:

public final static Integer SOME_CONSTANT = Integer.valueOf(99);
Run Code Online (Sandbox Code Playgroud)

而不是经典

public final static int SOME_CONSTANT = 99;
Run Code Online (Sandbox Code Playgroud)

我知道对象和原语之间的基本区别,还有自动装箱。但是我在我们公司的代码中看到了这个声明,我想知道将整数常量声明为对象有什么特别的原因吗?

java

5
推荐指数
1
解决办法
9022
查看次数

用 == 比较 Integer 和 int

List<Integer> test = List.of(955, 955);
if (test.get(1) == test.get(0))
...
Run Code Online (Sandbox Code Playgroud)

以上条件导致 false

List<Integer> test = List.of(955, 955);
int a = test.get(1);
int b = test.get(0);
if (a == b)
...
Run Code Online (Sandbox Code Playgroud)

上述条件返回true

为什么会这样?片段之间有什么区别?

java autoboxing unboxing integer wrapper

4
推荐指数
1
解决办法
117
查看次数