相关疑难解决方法(0)

关于Java的字符串池的问题

考虑以下代码:

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

使用new关键字时,Java会abc String再次创建吗?这会存储在常规堆还是String池中?多少人String在将s结尾String池?

java string string-pool

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

字符串常量池

由于这些问题#1说明:问题1问题2我的理解是" 字符串常量 "被拘留时:

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

在以下情况下,JVM将创建一个新的String对象,而不是使用String Pool中的现有对象:

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

但是,在阅读以下两个类似的陈述后,我有一个疑问.

当编译器遇到String文本时,它会检查池以查看是否已存在相同的String.如果找到匹配项,则对新文本的引用将定向到现有String,并且不会创建新的String文本对象.

在这种情况下,由于关键字"new",我们实际上最终会遇到略微不同的行为.在这种情况下,对字符串文字的引用仍然放在常量表(String Literal Pool)中,但是,当你来到关键字"new"时,JVM必须在运行时创建一个新的String对象,而不是使用常量表中的那个.

因此,当我们使用"new"并基于上面的定义创建对象时,我们还在非池内存池内存中放置引用.当我们这样做时,JVM是否也应该返回相同的引用?:

String one = new String("test");
String two = "test";

System.out.println(one.equals(two)); // true
System.out.println(one == two);      // false
Run Code Online (Sandbox Code Playgroud)

因为在声明字符串文字时String three = "test";它会存在于池中吗?因此应该返回相同的参考和打印真实?或者之前的陈述是否意味着它们将被放入池内存中,但只是在使用new运算符时跳过?

java

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

Java Strings何时实施?

受到关于这个问题的评论的启发,我很确定Java String是在运行时而不是编译时间实现的 - 当然,事实上可以在不同的时间编译类,但在运行时仍然会指向相同的引用.

我似乎无法找到任何证据支持这一点.谁能证明这一点?

java string

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

Java对象分配

我是Java的新手,我对于对象分配有一些问题.例如,

Test t1 = new Test();
Test t2 = t1;
t1.i=1;
Run Code Online (Sandbox Code Playgroud)

假设变量i的测试类中定义的,我说得对假设T1和T2点到修改同一个对象t1.i=1会影响t1t2?实际上我测试了它,看起来我是对的.但是,当我尝试相同的操作时String,修改仅发生在另一侧不受影响的一侧.这背后的原因是什么?

编辑:我尝试使用String的情况.

String s1 = "0";
String s2 = s1;          
s1 = "1";
System.out.println(s1);
System.out.println(s2);
Run Code Online (Sandbox Code Playgroud)

我通过测试String上的案例来实现我的错误,因为它是不可变的.我认为s1="1"修改字符串的情况实际上是将"1"的引用返回给s1.不过,我的问题仍然存在.是否Test t2 = t1;导致t2和t1指向同一个对象,或者现在每个都有自己的对象?这种情况是否适用于Java上的所有对象?

java object pass-by-reference variable-assignment

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

使用新运算符创建了多少个对象?

可能重复:
Java字符串:"String s = new String("silly");"

如果我写

String s= new String("how many object b created by this method ");
Run Code Online (Sandbox Code Playgroud)

与这样做相比,将创建多少个参考对象和对象:

Sting s1="Is this method is good as compare to upper"; 
Run Code Online (Sandbox Code Playgroud)

java

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

创建对对象的引用

我在这里有这个对象:

public class ItemInfo {

    String productName;
    String rfidTagNumber;
    String originalLocal;
    String currentLocal;
    double productPrice;

    public ItemInfo(String name, String tag, String origLoc, String curLoc, double price) {
        productName = name;
        rfidTagNumber = tag;
        originalLocal = origLoc;
        currentLocal = curLoc;
        productPrice = price;
    }
Run Code Online (Sandbox Code Playgroud)

我需要ItemInfo在这里创建并引用一个对象:

public class ItemInfoNode {

    ItemInfoNode next;
    ItemInfoNode prev;

    public ItemInfoNode(){

    }

    public void setInfo(ItemInfo info) {

    }

    public ItemInfo getInfo(){
        return null;    
    }

    public void setNext(ItemInfoNode node) {

    }

    public void setPrev(ItemInfoNode node) { …
Run Code Online (Sandbox Code Playgroud)

java reference object

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