gpt4 book ai didi

java - 编译时或运行时期间的实习何时完成?代码中出现这种行为的原因是什么? BlueJ 有问题吗?

转载 作者:行者123 更新时间:2023-12-01 07:26:33 27 4
gpt4 key购买 nike

Input is "12" this will return true when u enter "12" When you will enter "012" in this code it return false.. string 的值为 12 。'string_input' 存储输入的数字string 在代码中声明并初始化而string_input是用户在运行时输入的

案例1

string_5=string_input.substring(0);
System.out.println(string==string_5);

当我们输入“12”时,它返回 true

案例2

string_5=string_input.substring(1);
System.out.println(string==string_5);

现在当我们输入“012”时..它返回 false

为什么会出现这种情况??? :/

最佳答案

回答标题问题:仅在技术上运行时,因为在编译时没有String池可以实习。

但是,当程序启动时,源文件中定义的所有字符串文字和常量值字符串都会自动保留,并且可以使用 String#intern() 方法保留其他字符串。

此外,对于 future 的读者:OP 的结果似乎是 IDE 的一个怪癖。 OP 最初是通过 BlueJ 的自定义 public static void main(String string_input) main 方法签名将输入作为命令行参数输入。显然 BlueJ 在幕后做了一些恶作剧,以使其匹配 JLS 所需的 public static void main(String[] args) 签名,并且显然这些恶作剧涉及在某个时刻对输入字符串进行实习,导致OP 的结果。

编辑以下答案:看起来我犯了一个小阅读错误。虽然这个答案在某种程度上(某种程度上)有效,但它依赖于 string == string_input 的事实,在OP更新问题之前我无法确认这一点(这显然无法完成,因为源代码已被删除)。

答案可以在String的源代码中找到:

public String substring(int beginIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
int subLen = value.length - beginIndex;
if (subLen < 0) {
throw new StringIndexOutOfBoundsException(subLen);
}
return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
}

注意最后一行:如果 beginIndex == 0,则返回原始 String 本身。因此,在情况 1 中,string 确实与 string_5 指向同一个对象,因此打印了 true

但是,如果 beginIndex != 0,则会创建一个新的 String,因此 string 不再指向与string_5,因此打印 false

关于java - 编译时或运行时期间的实习何时完成?代码中出现这种行为的原因是什么? BlueJ 有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23720381/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com