一个基础问题的深入讨论,见以下代码:String s1 = "abc";
String s2 = null;
System.out.println(s1 + s2);以上代码会得到的结果是:abcnull,我希望得到abc,有没有办法。个人希望能通过类似重载运算符的的方法解决,不希望改变太多现有代码,请教大虾,突然发现不能重载云算法,也无法继承StringBuffer重写append。PS:什么通过非空判断、自己写function来实现字符串与的童鞋勿扰。String
String s2 = null;
System.out.println(s1 + s2);以上代码会得到的结果是:abcnull,我希望得到abc,有没有办法。个人希望能通过类似重载运算符的的方法解决,不希望改变太多现有代码,请教大虾,突然发现不能重载云算法,也无法继承StringBuffer重写append。PS:什么通过非空判断、自己写function来实现字符串与的童鞋勿扰。String
2. Java没有运算符重载
3. 这么跟你说吧,你想做的这件事情,就跟让1+2 = 5一样。首先不可能,其次影响其他代码,因为这是一个基础操作,一动,整个程序就坏掉了
String s2 = null;
System.out.println(s1 + s2);
如果这是一段java代码,那么输出的结果只能是abcnull,不管你用什么其它任何java支持的方法,都不能改变这个结果。除非改变java语言、JDK或者JVM。
String s2 = null;
System.out.println((s1 == null ? "" : s1) + (s2 == null ? "" : s2));
1、只有当s2==null时才输入“abc”,5楼答案是正解
2、还是忽略s2的值(这个不大可能吧)?或有其他什么想法?
java这么写的,我也没办法重写 String的valueOf函数只能重写PrintStream
//重写System.out.println的PrintStream
class MyPrintStream extends PrintStream
{
public MyPrintStream(PrintStream systemout) {
super(systemout);
} @Override
public void print(String s)
{
s = s.replaceAll("null","");
super.print(s);
}
}
public class Test {
public static void main(String[] args) throws Exception{ String s = "abc";
String s2 = null;
System.out.println(); MyPrintStream myPrintStream = new MyPrintStream(System.out);
System.setOut(myPrintStream);
System.out.println(s2+s);
}
}
return (obj == null) ? "null" : obj.toString();
}如果你修改的了,就吧 "null"换成 "" 就ok了。
用于替换默认的 null 处理。
比如 setDefaultValueForNull 之类的函数,修改一个static成员指定valueOf函数 碰到null Object的行为再或者,干脆能重写valueOfbut,这是个static函数,如何重写?之所以是static ,无非是就要处理实例是null的情况。