关于字符串的陷阱;
第一次使用某一个字符串直接量得时候,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制表符。
时间: 2024-10-15 18:38:09