相关疑难解决方法(0)

为什么Java中没有String.Empty?

据我所知,每次输入字符串文字时"",字符串池中都会引用相同的String对象.

但是为什么String API不包含a public static final String Empty = "";,所以我可以使用引用String.Empty

它至少可以节省编译时间,因为编译器会知道引用现有的String,而不必检查它是否已经被创建以供重用,对吧?我个人认为,在许多情况下,字符串文字的扩散,尤其是小字符串,是一种"代码味道".

那么,没有String.Empty背后有一个大设计理由,还是语言创作者根本没有分享我的观点?

java string

237
推荐指数
8
解决办法
28万
查看次数

如何在java中获取对象的内存位置?

我想知道JVM分配给放置在系统内存中的对象的位置.

java memory-management object

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

计算由Java代码创建的String对象

以下代码创建了多少个String对象?

String x = new String("xyz");
String y = "abc";
x = x + y;
Run Code Online (Sandbox Code Playgroud)

我访问过许多网站,其中一些人说这行代码创建了3个对象,有些人说它创建了4个.我只是想知道在执行这行代码后创建了多少个对象.

java string

23
推荐指数
5
解决办法
7502
查看次数

Java中新String()和新String("")的字符串初始化有什么区别?

Java中的以下两个初始化之间有什么区别?

  1. String a = new String();
  2. String b = new String("");

java string initialization

22
推荐指数
1
解决办法
1361
查看次数

在Java中编译时是否完成了字符串实习?

我真的很困惑字符串实习在Java中是如何工作的.我写的时候:

String a = "ABC";
String b = "ABC";

if (a==b)
    System.out.println("Equal");
Run Code Online (Sandbox Code Playgroud)

编译器时编译器是否将字符串文字"ABC"存储到字符串常量池中?

这听起来不合逻辑,因为我认为字符串常量池是由JVM在运行时创建的,如果它在编译时完成,我不知道如何这样做,因为Java编译器甚至没有调用JVM.

如果它不是在编译时完成并且它是在运行时完成的,那么为什么以下返回false(取自此答案)?

// But .substring() is invoked at runtime, generating distinct objects
"test" == "!test".substring(1) // --> false
Run Code Online (Sandbox Code Playgroud)

如果它是在运行时完成的,为什么JVM不能确定它们是相同的字符串?

我真的很困惑字符串实习如何在Java中工作以及Java字符串池的存储位置.

java string equality

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

Java中字符串实习的奇怪行为

代码如下:

String s = new String("1");
s.intern();
String s2 = "1";
System.out.println(s == s2);

String s3 = new String("1")+new String("1");
s3.intern();
String s4 = "11";
System.out.println(s3 == s4);
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是:

false
true
Run Code Online (Sandbox Code Playgroud)

我知道s并且s2是不同的对象,因此结果的计算结果为false,但第二个结果的计算结果为true.有人能告诉我区别吗?

java string

15
推荐指数
2
解决办法
1127
查看次数

Java如何存储字符串以及子字符串如何在内部工作?

class StringTesting {
    public static void main(String args[])
    {
        String str = "abcd";
        String str1 = new String("abcd");
        String str2 = str.substring(0,2);
        String str3 = str.substring(0,2);
        String str4 = str.substring(0,str.length());
        String str5 = str1.substring(0,2);
        String str6 = str1.substring(0,2);
        String str7 = str1.substring(0,str1.length());

        System.out.println(str2 == str3);
        System.out.println(str == str4);
        System.out.println(str5 == str6);
        System.out.println(str1 == str7);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我在java 1.6.0_27上得到的输出:

false
true
false
true
Run Code Online (Sandbox Code Playgroud)

有人可以解释输出.我知道Java区分存储在堆中的String和存储在String"common pool"中的String(可以是interned).在内部,他们的表现如何不同.它是如何改变子串算法的.请在适当的地方引用书籍/文章/博客等.

java string substring

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

实习方法概念混淆作为输出随着不同版本而改变

对于Java 1.6版,输出是false true,但是对于版本1.8,输出更改为true true.

有人可以解释为什么会这样吗?

Intern方法用于引用堆中创建的对象的相应字符串常量池,如果该对象不存在,则它将创建String常量池.如果我的理解是错误的,请纠正我.

public class Intern_String2 {

 public static void main(String[] args) {

  String s1 = new String("durga");  //object created in heap

  String s2 = s1.concat("software");
  //object durga software created in heap at runtime

  String s3 = s2.intern();
  // create durga software object in string constant pool as none exist.

  System.out.println(s2==s3);//should be false but print true in 1.8 version.

  String s4 = "durgasoftware";
  System.out.println(s3==s4);//prints true in both version..      
 }
}
Run Code Online (Sandbox Code Playgroud)

java string

7
推荐指数
1
解决办法
275
查看次数

实习生如何在以下代码中工作?

String a = "abc";
String b = a.substring(1);
b.intern();
String c = "bc";
System.out.println(b == c);
Run Code Online (Sandbox Code Playgroud)

问题可能是愚蠢的,因为实习生在这里没有主要用法,我仍然对这个事实感到困惑,为什么会有b == c结果true.

什么时候

String b = a.substring(1)
Run Code Online (Sandbox Code Playgroud)

执行,String b对象的引用"bc"

是否在String Constant池中b.intern创建文字"bc",即使它确实如此,怎么会b==c产生true

java string literals

5
推荐指数
2
解决办法
110
查看次数

Java中String ID的含义是什么?

可能重复:
当我们有==运算符时为什么是equals()方法?

当我尝试用Java执行代码时,它给了我2个不同的输出

String txt1="Hello";
String txt2="Hello";
System.out.println((boolean)txt1==txt2);

String txt1=new String("Hello");
String txt2=new String("Hello");
System.out.println((boolean)txt1==txt2);
Run Code Online (Sandbox Code Playgroud)

java string

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

计算不同的字符串对象实例

String在以下代码段中创建了多少个不同的对象实例?

String s1 = new String("hello");
String s2 = "GoodBye";
String s3 = s1;
Run Code Online (Sandbox Code Playgroud)

我不确定这里的所有推理.

通过使用newString类创建实例的关键字,我猜这必须是一个对象.但是,我很困惑,是Stringnew现在考虑了一个方法,因为它有()然后它调用String文字"你好"吗?

String s2 = "Goodbye"; 我认为这是一个字符串文字,因为字符串实际上是对象,所以即使字符串文字被认为是对象.不是100%确定是否属实.

String s3 = s1;只是回到s1.因此,它并不明显.

所以我的答案是2个不同的对象.

请解释我是对还是错.

java instances

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

为什么Object == null有效?

因此,当我们比较对象时,我们使用equals()方法,或者在if语句中使用类似的东西.如果我们有以下代码

String a = "foo";
String b = "foo";
return a==b
Run Code Online (Sandbox Code Playgroud)

因为a和b引用不同的对象,我们会将错误返回给我们.另一方面,

String a = null;
return a == null
Run Code Online (Sandbox Code Playgroud)

我们会成真的.这是为什么?

java object

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