编辑 感谢您的及时答复。请查看真正的问题是什么。这次我已经大胆了。
我确实了解==和.equals之间的区别。所以,这不是我的问题(我实际上为此添加了一些上下文)
我正在执行以下针对空字符串的验证:
if( "" == value ) {
// is empty string
}
在 过去的 从数据库中获取的值或者从另一个节点反序列化对象时,本次测试 失败
,因为这两个字符串实例确实不同对象的引用,尽管它们含有相同的数据。
因此,解决这些情况的方法是
if( "".equals( value ) ) {
// which returns true for all the empty strings
}
我很好。这是很清楚的。
今天,这种情况再次发生,但令我感到困惑的是,这次应用程序是一个非常小的 独立应用程序 ,根本不使用 网络
,因此,不会从数据库中获取新字符串,也不会从另一个节点反序列化该字符串。
所以问题是:
"" == value // yields false
和
"".equals( value ) // yields true
对于本地独立应用程序?
我很确定代码中没有使用 new String() 。
字符串引用可能是“”的唯一方法是因为直接在代码中为它分配了“”(或者就是我所认为的),例如:
String a = "";
String b = a;
assert "" == b ; // this is true
以某种方式(在阅读了更多代码后,我有了一个线索)创建了两个不同的空字符串对象引用,我想知道 如何
更多jjnguys答案行:
字节!
编辑:结论
我找到了原因。
在jjnguy建议之后,我能够以不同的眼光看代码。
有罪的方法:StringBuilder.toString()
分配并初始化一个新的String对象,以包含该对象当前表示的字符序列。
h!…
StringBuilder b = new StringBuilder("h");
b.deleteCharAt( 0 );
System.out.println( "" == b.toString() ); // prints false
谜团已揭开。
该代码使用StringBuilder处理不断增长的字符串。事实证明,在某个时候有人做到了:
public void someAction( String string ) {
if( "" == string ) {
return;
}
deleteBankAccount( string );
}
和使用
someAction( myBuilder.toString() ); // bug introduced.
ps最近我读了太多CodingHorror吗?还是为什么我觉得需要在这里添加一些有趣的动物图片?
String s = "";
String s2 = someUserInputVariale.toLowercase(); // where the user entered in ""
这样的事情将导致s == s2
评估为假。
许多代码底稿会创建新的代码,Strings
而不会暴露对的调用new String()
。
描述 (Description) 这不是一个功能。 这是正则表达式替换运算符。 根据PATTERN中指定的正则表达式,数据将替换为REPLACE。 与m //一样,分隔符由s后面的第一个字符定义。 语法 (Syntax) 以下是此函数的简单语法 - s/PATTERN/REPLACE/ 返回值 (Return Value) 此函数在失败时返回0,并在成功时返回替换次数。 例子 (Example)
描述 (Description) 字符类\S匹配任何非空白字符。 例子 (Example) 以下示例显示了预定义字符类匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PredefinedCharacterClassDemo {
描述 (Description) 字符类\s匹配任何空格字符。 例子 (Example) 以下示例显示了预定义字符类匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PredefinedCharacterClassDemo { p
我正在写一段代码来检查签名 如果r和s是正的,我下面的代码可以工作,否则验证失败。 我的代码是 我的签名是从原始的r和s开始,以der格式创建的。请记住,如果r或s是负数,要在der格式中添加“00 ”,我还使用了BouncyCastle ANS1类 但是我仍然能够验证r和s是否为正,如果其中一个为负,我就不能验证(初始字节大于0x80) 我错过了什么? -----编辑----- 我已经创建了一个
问题内容: 在我上大学的这个Java项目中,我遇到一种情况,当前正在使用 其中msgs是一个链接的阻止队列,通过 但是,我想使用一个ObjectInputStream和一个ObjectOutputStream。我已经在构造函数中初始化了它们,并在构造它后刷新了ObjectOutputStream,我读到某个地方必须这样做。 我想同时发送Strings和另一个Object类型,通过网络将其称为gam
如何从字符串解析LocalTime,例如mm:ss中的“10:38.0”。什么格式?我很难改变格式。 出错 java类型的ISO。时间总体安排解析的java。时间总体安排DateTimeParseException:无法分析文本“10:38.2”:无法从TemporalAccessor获取本地时间:{MinuteOfHour=10,MicroOfSecond=200000,MilliOfSecon