java 加和加等于有什么区别、该如何解决
来源:互联网 发布:中山大学网络缴费平台 编辑:程序博客网 时间:2024/05/16 18:04
大家都知道字符串频繁的相加是很消耗内存的,今天我没事干做了个试验,发现使用+号并不会影响内存,而使用+=会很消耗内存。
然后查了下jdk1.6的api,说明如下:
Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。
但是+=依旧很消耗内存,循环二十多次就挂掉了,那么在字符串相加时采用"+"和"+="到底区别在哪?
以下是我做试验的例子
public static void main(String[] args) {
String str = "str_";
int count = 0;
try {
while(true){
count++;
str+=str;//立马挂掉
//str=str+str; //一直没挂掉
}
} catch (Error e) {
System.out.println(count);
e.printStackTrace();
}
}
------解决方案--------------------------------------------------------
怀着好奇的心情,试了下代码。
都挂了。
------解决方案--------------------------------------------------------
还真没遇到过,java.rmi.NoSuchObjectException,测试了下,发现都挂了,全都是因为内存不足。但是内存不足不是+和+=造成的,而是str过大造成的。我认为+和+=并没有本质的区别,只是语法不同而已。另外,每做一次 + 就产生个StringBuilder对象,然后append后就扔掉。下次循环再到达时重新产生个StringBuilder对象,oracle存储过程,然后 append 字符串,如此循环直至结束。如果我们直接采用 StringBuilder 对象进行 append 的话,我们可以节省 N - 1 次创建和销毁对象的时间。所以对于在循环中要进行字符串连接的应用,一般都是用StringBuffer或StringBulider对象来进行 append操作。
------解决方案--------------------------------------------------------
楼主你想干嘛 弄个死循环只为了观察?
------解决方案--------------------------------------------------------
个人任务+与+=没有本质的区别,挂掉的原因跟这两个没有关系,应该是内存溢出了吧,每次循环都会产生一个新的对象(通过stingbuffer或stringbuilder的append方法处理),循环的次数多了,内存中的对象也就越多,剩余的空间也就越来越少,无用的对象得不到释放,最后导致了内存的溢出。
------解决方案--------------------------------------------------------
楼主弄个死循环是在寻找抛异常的刺激吧。呵呵
=和+=的确没有区别 ++ -- 等都一样
但从二楼中学习了。
------解决方案--------------------------------------------------------
可参考:
200分成33个奇数,也就是33个奇数想加等于200,该如何解决 http://www.myexception.cn/vc-mfc/167613.html
相关的主题文章:
然后查了下jdk1.6的api,说明如下:
Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。
但是+=依旧很消耗内存,循环二十多次就挂掉了,那么在字符串相加时采用"+"和"+="到底区别在哪?
以下是我做试验的例子
public static void main(String[] args) {
String str = "str_";
int count = 0;
try {
while(true){
count++;
str+=str;//立马挂掉
//str=str+str; //一直没挂掉
}
} catch (Error e) {
System.out.println(count);
e.printStackTrace();
}
}
------解决方案--------------------------------------------------------
怀着好奇的心情,试了下代码。
都挂了。
------解决方案--------------------------------------------------------
还真没遇到过,java.rmi.NoSuchObjectException,测试了下,发现都挂了,全都是因为内存不足。但是内存不足不是+和+=造成的,而是str过大造成的。我认为+和+=并没有本质的区别,只是语法不同而已。另外,每做一次 + 就产生个StringBuilder对象,然后append后就扔掉。下次循环再到达时重新产生个StringBuilder对象,oracle存储过程,然后 append 字符串,如此循环直至结束。如果我们直接采用 StringBuilder 对象进行 append 的话,我们可以节省 N - 1 次创建和销毁对象的时间。所以对于在循环中要进行字符串连接的应用,一般都是用StringBuffer或StringBulider对象来进行 append操作。
------解决方案--------------------------------------------------------
楼主你想干嘛 弄个死循环只为了观察?
------解决方案--------------------------------------------------------
个人任务+与+=没有本质的区别,挂掉的原因跟这两个没有关系,应该是内存溢出了吧,每次循环都会产生一个新的对象(通过stingbuffer或stringbuilder的append方法处理),循环的次数多了,内存中的对象也就越多,剩余的空间也就越来越少,无用的对象得不到释放,最后导致了内存的溢出。
------解决方案--------------------------------------------------------
楼主弄个死循环是在寻找抛异常的刺激吧。呵呵
=和+=的确没有区别 ++ -- 等都一样
但从二楼中学习了。
------解决方案--------------------------------------------------------
可参考:
200分成33个奇数,也就是33个奇数想加等于200,该如何解决 http://www.myexception.cn/vc-mfc/167613.html
相关的主题文章:
- 小弟我被郁闷到了 创建xml的有关问题
- Struts2 下载 就会报Connection reset by peer
- 润乾报表总是很卡,怎么处理
- java 加和加等于有什么区别、该如何解决
- jquery中变量加$和不加$有什么区别
- 加和不加java:comp/env/前缀有什么区别?
- 应用管理 JNDI里面加和不加java:comp/env/前缀有什么区别?
- new 一个对象的时候加括号和不加括号有什么区别
- 通过在总线加LOCK#锁的方式有什么缺陷?如何解决?
- Java的synchronized加在方法上或者对象上有什么区别?
- Java的synchronized加在方法上或者对象上有什么区别?
- div和section有什么区别?在加一个article标签
- 声明double变量的时候,加d与不加d有什么区别
- Java ,方法,变量前加final 各有什么不一样?
- java 请求url加时间戳有什么用
- 怎样知道该加什么头文件?
- 【Stackoverflow好问题】Java修饰符:public,protected,private,不加修饰符。有什么区别呢?
- setTimeout()中函数加双引号和不加有什么区别?
- onTouch和onTouchEvent以及onClick的顺序,有什么区别,又该如何使用?
- java 如何使用SpringMVC 和struts2有什么区别
- java取余运算时,用等于0和等于1有什么不同?
- $.fn.extend父页面调用有关问题
- grep命令详解
- ExtJs4 笔记(4) Ext.XTemplate 模板
- ComboBox的提交值有关问题
- Android JNI 类型转换
- java 加和加等于有什么区别、该如何解决
- QT学习 渐变填充
- VC6和VS2005(及2010)的一些区别总结
- 个人命名规范
- linux系统ioctl使用示例
- QoS和QoE的关系
- Python Eric4安装配置
- ExtJs4 笔记(14) layout 布局
- 小波变换网文精粹:小波变换教程(一)