MyException - 我的异常网
当前位置:我的异常网» J2SE » 辨析java中的String之__拼接

辨析java中的String之__拼接(5)

www.MyException.Cn  网友分享于:2013-12-21  浏览:51次

this.key = key+key2;
this.value = value;
}


public static void main(String[] args) throws InterruptedException{
Test a = new Test("1","","1");
Test b = new Test("1","","2");
Test c = new Test("3","","3");
Test d = new Test("4","","4");
System.out.println("begin:"+(System.currentTimeMillis()/1000));
a.start();
b.start();
c.start();
d.start();
}

public void run(){
testDo.doSome(key, value);
}
}

class TestDo {

private TestDo() {}
private static TestDo _instance = new TestDo();
public static TestDo getInstance() {
return _instance;
}

public void doSome(Object key, String value) {

// 以大括号内的是需要局部同步的代码,不能改动!
{
try {
Thread.sleep(1000);
System.out.println(key+":"+value + ":"
+ (System.currentTimeMillis() / 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}




---------------------------
关于以上代码只需这样修改:
 private static String key; 
synchronized(key),不就完了么
------解决方案--------------------
学习了!!!!!!!!!!!1
------解决方案--------------------
我只是实现了同一个KEY对象实现同步,但由于是key为static,所以4个类对象的key的值会都一样
------解决方案--------------------
探讨
谢谢lz分享。

------解决方案--------------------
学习。。。
------解决方案--------------------
确实很容易弄错
------解决方案--------------------
探讨

可惜我不是版主,无法帮楼主推荐。。要不我申请一个版主? 大家到时候支持一下? Java版的版主已经常年见不着人了

首先关于前半部分 string的 +=操作。 楼主没必要讲这么多。 直接用 javap 看一下字节码就懂


后半部分, 关于synchronized的互斥,可以看一下我博客,前些日子周末无聊,就写写,很多人都容易犯这个错

------解决方案--------------------
你之前发了一个 java 关于字符串+ 重载的问题 我感觉有些问题
按你的解释如下代码

char[] str={1,2,3}
System.out.println("aa"+"bb"+str);
等同于 StringBuilder.append(aa).append("bb").append(str).toString();
 那结果应该是 aabb123

但是结果确是 aabb+数组的地址

所以我感觉你说的是不对的

对于+ 操作

如果引用为 null 则把它转换为 “null”。否则,该转换的执行就像无参数调用该引用对象的toString() 方法一样
------解决方案--------------------
我来模拟一下来证明你说的是错误的


char[] numbers={'1','2','3'};
String s = null;
s += "abc";
s +=numbers ;
System.out.println(s);

String i=null;
StringBuilder builder=new StringBuilder(String.valueOf(i));
builder.append("abc");
builder.append(numbers);
String temp=builder.toString();

System.out.println(temp);

上面是代码
nullabc[C@89ae9e
nullabc123

下面是结果 ,所以事实证明 +的执行 并不是你分析的那样


------解决方案--------------------
还好String s = null;
s += "abc";
System.out.println(s); 这个我知道。。因为之前遇到过这个问题,结果在画面text中输出的是null字符串。。

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有