day02
数据类型
太简单,没啥写的,略
注意:空串""是长度为0的字符串。空串是一个Java对象,有自己的串长度(0)和内容(空)。不过,String变量还可以存放一个特殊的值,名为null,这表示目前没有任何对象与该变量关联。
类型转换
自动类型转换:小范围类型的变量——>大范围的变量
数据范围小的变量可以直接赋值给数据范围大的变量(byte、short 和char在表达式中是直接转换成int类型参与运算的)
byte→short→int→long→float→double
↑
char
强制类型转换:大范围类型的变量——>小范围的变量
可能造成数据失真
注意:byte a = 3;
byte b = 4;
byte c = a+b;//会报错,变量的值不确定,有可能a+b的值大于byte的最大值
运算符
各种运算符:略
运算符优先级:&&的优先级比||的高,所以表达式 a&&b||c 等价于(a&&b)||c ;
+=是右结合运算符,所以表达式a+=b+=c等价于a+=(b+=c),也就是将b+=c的结果(加上c之后的b)加到a上。;
“+”运算符可以拼接字符串:
Java语言允许使用+号连接(拼接)两个字符串。
当将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串
Java里String字符串实现原理
C/C++里面的String是字符型数组,类似于:char str[] = "Hello";
但Java不是,Java字符串大致类似于char*指针:char* str = "Hello";
当采用另一个字符串替换str的时候,Java代码内部大致进行下列操作:
char* temp = malloc(6);
strncpy(temp,str,3)
strncpy(temp,"P!",3)
str = temp;
在java中我们只需要一句代码:str = "Help! "
即可实现上述操作。
字符串替换后原始字符串内存的释放:
这样做会不会产生内存遗漏呢?毕竟,原始字符串放置在堆中。十分幸运,Java将自动地进行垃圾回收。如果一块内存不再使用了,系统最终会将其回收。
检测字符串是否相等
可以使用equals方法检测两个字符串是否相等。
一定不要使用==运算符检测两个字符串是否相等!这个运算符只能够确定两个字符串是否放置在同一个位置上。当然,如果字符串放置在同一个位置上,它们必然相等。但是,完全有可能将内容相同的多个字符串的拷贝放置在不同的位置上。
如果虚拟机始终将相同的字符串共享,就可以使用== 运算符检测是否相等。但实际上只有字符串常量是共享的,而+或substring等操作产生的结果并不是共享的。因此,千万不要使用== 运算符测试字符串的相等性,以免在程序中出现糟糕的bug。从表面上看,这种bug很像随机产生的间歇性错误。
相同的字符串在内存常量池中只有一份,字符串常量是共享的。
通过“ ”定义字符串内存在常量池
如:
String s1= “abc”;
String s2 ="abc";
s1和s2指向同一个地址。
标签:类型转换,char,Java,运算符,str,字符串,byte,数据 From: https://www.cnblogs.com/xkh-blogs/p/17229711.html