public static void main(String[] args){
one();
two();
three();
}
public static void one() {
String s1 = "hill5";
String s2 = "hill" + 5;
System.out.println(s1==s2);
}
public static void two() {
String s1 = "hill5";
int i =5;
String s2 = "hill" + i;
System.out.println(s1==s2);
}
public static void three() {
String s1 = "hill5";
String s2 = "hill" + s1.length();
System.out.println(s1==s2);
}
输出为
true
false
false
字符串文字使用内部过程,然后为什么two()
和three()
为假。我可以理解情况,three()
但two()
不清楚。但是两种情况都需要适当的说明。
有人可以解释正确的原因吗?
在2和3的情况下,由于hill + i
是运行时语句,因此Compiler无法计算String的值,对于s1.length()
像这样String s1 and s2
使用编译时间常量,s1="hill5"
并且s2="hill" + 5
记住,分配为文字的字符串是常量,因为
String是不可变的 ,所以不能修改其状态。
因此,在编译时,编译器会说“哦,是的,它们被计算为相同的值,我必须为s1和s2分配相同的引用”。
但是在方法two()
和的情况下three()
,编译器会说“我不知道,可能是我的值可以随时更改,或s1.length()
随时更改”,这是运行时的事情,因此编译器不会将two()
and three()
方法的s2 放在pool中,
因此,它们是错误的,因为在运行时,一旦正确更改就创建了新对象!
问题内容: 请告诉我一个实时的情况来比较String,StringBuffer和StringBuilder? 问题答案: 如果使用的是JGraph,则应尝试为算法设计的。它的功能之一是使用库进行可视化。它仍然开发,但相当稳定。我前段时间分析了算法的复杂性。其中一些并不是最快的,但是如果你要自己实现它们并需要显示图形,那么它可能是最佳选择。我真的很喜欢使用它的API,当时我不得不快速编写一个在图形上
当我有一个字符串需要将一个字符连接到它的结尾时,我应该更喜欢超过是否有任何性能原因? 我知道数组字符串连接和字符串生成器,我并不是在询问一般情况下如何连接字符串的建议。 我也知道有些人会有冲动向我解释过早的优化,而且一般来说我不应该为这些小事情费心,请不要... 我之所以问这个问题,是因为从编码风格的偏好来看,我更倾向于使用后一个,但我觉得第一个应该表现得稍微好一点,因为知道所附加的只是一个字符,
问题内容: 这是以前有关Java中的String初始化的一些问题的后续问题。 在用Java进行了一些小测试之后,我面临以下问题: 为什么我可以执行此语句 当str2一个String对象初始化为,但我不能调用方法toString()上str2?那么Java如何将空字符串对象和字符串文字串联起来? 顺便说一句,我还尝试将一个初始化为null和字符串文字的Integer连接起来,”a_literal_s
问题内容: 我有以下Ecma-Script-6代码 输出如下: 和 我已经能够在此处将字符串串联起来,那么使用模板文字的情形将是什么? 问题答案: 如果像问题示例中那样仅将模板文字与占位符(例如)一起使用,则结果与串联字符串相同。从主观上讲,它看起来更好并且更易于阅读,尤其是对于多行字符串或包含这两者的字符串,因为您不必再转义那些字符了。 可读性是一个很棒的功能,但是关于模板最有趣的是Tagg
问题内容: 根据guido(以及其他一些Python程序员)的说法,隐式字符串文字串联被认为是有害的。因此,我试图识别包含此类串联的逻辑行。 我的第一次(也是唯一的尝试)是使用; 我曾想过用来分割逻辑线,所以我将确定用引号引起来的部分,如果这些部分彼此相邻,则将其视为“文字级联”。 但是,这在多行字符串上失败,如以下示例所示: 我可以调整这是一些奇怪的临时方法,但是我想知道您是否可以想到一个简单的
大家好。我必须制作这个程序,输入一个文本,输出有多少个单词,以及有多少个长度为1、2等的单词。我已经完成了计算单词数的程序,但对于第二部分我不知道。非常感谢任何能帮忙的人。