相关疑难解决方法(0)

两个具有相同内容的字符串是否会存储在同一个内存位置?

这是我在采访中得到的一个问题.

我有两个字符串定义为

String s1="Java";
String s2="Java";
Run Code Online (Sandbox Code Playgroud)

我的问题是这两个引用是否指向相同的内存位置.通常,当我们创建相同的字符串(没有new关键字)时,内容是否只存储在内存中一次,所有具有相同内容的String对象只是引用相同的位置,而不是冗余地存储字符串"Java"?s1和s2的哈希码是相同的.但是哈希码是否直接依赖于对象的内存位置?

java string memory-management

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

Java如何实现字符串池?

我想更深入地理解字符串池.请帮助我在Java中获取包含此实现的源类文件.

问题更多的是找到源代码或字符串池的实现,以深入研究这个概念,以更多地了解其中的一些未知或难以捉摸的事物.通过这种方式,我们可以更有效地使用字符串,或者考虑使用其他方法来实现我们自己的垃圾收集,以防我们有一个应用程序创建了如此多的文字和字符串对象.

java

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

在Java中,我应该何时更喜欢String而不是StringBuilder?

我知道StringBuilder应优先于String,因为String将保存在常量字符串池中,并为其分配新值不会覆盖以前的值.但是,StringBuilder是一个覆盖其先前值的对象.

  • 在什么情况下我应该使用String over StringBuilder反之亦然.
  • 另外如果我在Hibernate的支持类中有String类型的变量,我应该使用StringBuilder吗?怎么样?

    ...
    Result result = (Result) criteria.list().get(0);
    
    
    class Result{
       String name;
       String fname;
       ...
    }
    
    Run Code Online (Sandbox Code Playgroud)

java orm stringbuilder hibernate jpa

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

Java的String.intern()的目的是什么?

我知道有两种方法可以在Java中创建String:

String a = "aaa";
String b = new String("bbb");
Run Code Online (Sandbox Code Playgroud)

第一种方式,Java肯定会在字符串池中创建一个String对象并a引用它.(假设"aaa"之前不在游泳池里.)

使用第二种方法,将在堆中创建一个对象,但是jvm还会在字符串池中创建一个对象吗?

在这篇关于Java字符串池的问题中,@ Jesper说:

如果你这样做:

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

然后在池中将有一个String对象,一个代表文字"abc",>的对象,并且将有一个单独的String对象,而不是在池中,它包含池对象的>内容的副本.

如果这是真的,那么每次使用new String("bbb");,在池中创建一个对象"bbb",这意味着通过上面的任何一种方式,java将始终在池中创建一个字符串对象.然后intern()用于什么?在文档http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#intern()中,它说:

调用实习方法时,如果池已经包含等于此字符串对象的字符串(由equals(Object)方法确定),则返回池中的字符串.否则,将此String对象添加到池中,并返回对此String对象的引用.

这意味着有些情况下池中没有字符串,这可能吗?哪一个是真的?

java string

7
推荐指数
2
解决办法
2210
查看次数

Java: Beginner question regarding Strings

When creating a String in Java, what is the difference between these two:

String test = new String();
test = "foo";
Run Code Online (Sandbox Code Playgroud)

and

String test = "foo";
Run Code Online (Sandbox Code Playgroud)

When do I need to use the keyword new? Or are these two basically the same and they both create a new String object?

java string object

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

Java如何处理内存中的String对象?

有人问我这个问题:

String s = "abc"; // creates one String object and one
          // reference variable
In this simple case, "abc" will go in the pool and s will refer to it.
String s = new String("abc"); // creates two objects,
                 // and one reference variable*
Run Code Online (Sandbox Code Playgroud)

基于以上细节,在下面的代码的println语句之前创建了多少个String对象和多少个引用变量?

String s1 = "spring ";
String s2 = s1 + "summer ";
s1.concat("fall ");
s2.concat(s1);
s1 += "winter ";
System.out.println(s1 + " " + s2);
Run Code Online (Sandbox Code Playgroud)

我的回答是这个代码片段的结果是春冬春夏

有两个参考变量,s1和s2.共创建了八个String对象:"spring","summer"(lost),"spring summer","fall"(lost),"spring fall"(lost),"spring spring spring"(丢失) ),"冬天"(丢失),"春天的冬天"(此时"春天"丢失).

在此过程中,八个String对象中只有两个不会丢失.

这是对的吗?

java string scjp

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

Java字符串不可变性和使用相同的字符串值来创建新字符串

我知道问题的标题不是很清楚,对不起,不知道如何提出.我有一个非常基本的java实现问题,我想关注应用程序性能,但它也涉及java中的String创建模式.

我理解Java中字符串的不变性概念.我不确定的是,我在某处读到以下内容不会产生两个不同的String对象:

String name = "Sambhav";
String myName= "Sambhav";
Run Code Online (Sandbox Code Playgroud)

我想知道Java是如何做到的?它是否实际在程序存储器中查找String值并检查其是否存在,如果它不存在则创建一个新的String对象?在这种情况下,显然它节省了内存,但存在性能问题.

还可以说我有这样的代码:

  public void some_method(){
        String name = "Sambhav";
        System.out.println(name); //  or any random stufff
  }
Run Code Online (Sandbox Code Playgroud)

现在每次调用此函数时,是否有新的String被添加到内存中或者我使用相同的String对象?我很想知道这一切是如何发生的见解的?

如果我们这样说的话

String name = "Sambhav";
String myName= "Sambhav";
Run Code Online (Sandbox Code Playgroud)

因为参考不会创建新对象,怎么样

String name = new String("Sambhav");
String myName= new String("Sambhav");
Run Code Online (Sandbox Code Playgroud)

Java仍然能够捕获字符串是否相同,只是将myName指向与前一个语句中创建的对象相同的对象?

java string performance

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

内存中创建了多少个字符串?

说我有这个String表达

String hi = "Tom" + "Brady" + "Goat"
Run Code Online (Sandbox Code Playgroud)

我知道字符串池"允许运行时通过在池中保留不可变字符串来节省内存" 字符串池

字符串池中将创建多少个字符串?

我最初的猜测是5 - ,"Tom","Brady","Goat","TomBrady","TomBradyGoat"因为操作顺序的String级联(左到右?),或者是它只是最后的结果,"TomBradyGoat",存储在字符串池?

java string heap concatenation string-concatenation

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

在字符串中使用'=='?(JAVA)

String str1 = new String("I love programming");
String str2 = new String("I love programming");
boolean boo = str1 == str2; // evaluates to false

String str1 = "I love programming";
String str2 = "I love programming";
boolean boo = str1 == str2; // evaluates to true
Run Code Online (Sandbox Code Playgroud)

为什么第一个评估为假,第二个评估为真?

在这里你可以找到更多:什么是Java字符串池以及"s"与新String("s")有何不同?

java string equality sign equals

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

Java - 在函数内创建具有常量值的字符串

哪一个更好?

public class A {
      private static final String DOSOMETHING_METRICS = "doSomethingmetrics";
      private static final String SAYSOMETHING_METRICS = "saySomethingmetrics";
      public void doSomething() {
            ...
            System.out.println("Metrics for " + DOSOMETHING_METRICS + "is something");
      }
      public void saySomething() {
            ...
            System.out.println("Metrics for " + SAYSOMETHING_METRICS + "is something");
      }
}
Run Code Online (Sandbox Code Playgroud)

要么

public class A {
      public void doSomething() {
            final String DOSOMETHING_METRICS = "doSomethingmetrics";
            ...
            System.out.println("Metrics for " + DOSOMETHING_METRICS + "is something");
      }
      public void saySomething() {
            final String SAYSOMETHING_METRICS = …
Run Code Online (Sandbox Code Playgroud)

java string memory-management

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