day02

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指向同一个地址。

posted @   萌新小夏  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示