5,表达式中的陷阱

Java内存泄漏与字符串陷阱
本文探讨了Java中字符串直接量的内存管理机制,解释了内存泄漏现象,并提供了避免内存泄漏的方法,包括使用StringBuilder和了解表达式类型的自动提升规则。

关于字符串的陷阱;

第一次使用某一个字符串直接量得时候,jvm会将它放入字符串池中进行缓存;

关于内存泄漏例子:

String str=“hello”

String str=str+“java”

由于String里包含得字符序列是不能被改变的。 所以第二个str是指向另外一个字符串对象,此时hello字符串就会一次在内存中,垃圾回收机制不会回收它,此时就会内存泄漏。

如果要使用String可变字符串一般使用StringBuffer和StringBuilder,但是StringBuffer中绝大部分方法都使用了synchronized修饰符,以保证线程安全,但是它会降低该方法得执行效率。在没有多线程的环境下所以尽量使用StringBuilder类来表示字符串。

表达式类型的自动提升规则;

1,所有byte,short。和char类型都将被提升为int型。

char(byte,short)_int_long_float_double

2,整个算术表达式的数据类型自动提升与表达式最高级操作数同样得类型。

short sValue=5;
//定义了一个short类型变量,sValue将自动提升为int。
sValue=sValue-2;
// 讲一个int类型赋值给short类型变量时发生错误。
sValue-=2却可以编译正常,因为他等价与sValue=(sValue)(sValue-2);它包含隐士类型转换。(几乎所以双目运算符都包含隐士转换)
int val=3; 
int result=20/val;
System.out.println(""+result);
//输出6,可见结果为int类型。
System.out.println("hello"+'a'+7); 
System.out.println('a'+7+"hello");
输出  helloa7
     104hello 
当基本类型和String类型进行连接运算时,系统会将基本类型得值自动转化为String类型。

2,输入法也可能导致错误。

java程序通常不能包含全角字符,例如中文空格,tab制表符。

转载于:https://my.oschina.net/u/2480757/blog/516162

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值