一些基础知识

这些知识可能平时不太会用到,但是确实是实实在在存在的,需要多多注意一下。

char字符型默认占两个字节空间,一个字符,所以可以存储一个汉字

char c = 'ab';//报错Too many characters in character literal字符文字中有太多字符
char c1 = '啊';//正确,汉字一般占用两个字节
byte字节型占用一个字节,一个字符
byte b = '嗯';//incompatible types不兼容的类型
byte b1 = 'a';
字符占位以及类型转换
char n = 'b';
System.out.println(++n);
System.out.println(n+1);

输出 c、100 。字符常量在内存中存储的位置是根据Unicode编码来设置的,‘b’字符排序98,第一个输出先执行++操作,就是99,输出‘c’,第二个输出,因为n已经变为99,所以结果时100 。这里因为数据类型不一致,char与int,操作之后自动转换为int,所以输出100 。如果变为(char)(n+1)结果就是‘d’。

自动转换方向char -> short -> int -> long -> float -> double

关于正则表达式的一个小问题

String names = "a|b|c";
String[] ret1 = names.split("|");
System.out.println(ret1.length);

结果输出5 。| 在正则中有定义代表或的意思。上面的表示“”相当于全部切割。正则中特殊符号需要加 \\ 来转义。

关于返回值的问题

String name = "abcabc";
String name1 = name.replace("b", "a");
System.out.println(name);
System.out.println(name1);

输出结果:abcabc,aacaac。replace函数,第一个参数target是需要替换的内容,第二个参数replacement是用来替换的内容

关于数据类型取值范围

byte n1 = 10 + 117;
byte n2 = 10 + 118;
System.out.println(n1);
System.out.println(n2);

使用IDEA不会运行程序,报错incompatible types(从 int 转换到 byte 可能会有损失)。这是因为这里的 10 和 117 属于字面量,经过 javac 编译优化后变成了 byte n = 127,而 n 的类型是 byte,编译后等号右侧的 127 默认类型是 int,所以会造成数据类型不匹配,而这时候 javac 会判断 127 是否位于 byte 类型的取值范围(byte 是 1 个字节,也就是 8 位,去掉最高位为符号位,其他可取值为 -128~127)之内,若在范围之内则会将 127 的类型转换为 byte(将 int 的 127 的第 32 位符号位记录在 byte 的第 8 位,然后截掉其他无用高位),否则报错。

关于常量的问题

byte n1 = 10;
byte n2 = n1 + 117;
System.out.println(n2);
byte n3 = (byte) 128;
System.out.println(n3);
byte n4 = (byte) (n1 + 117);
System.out.println(n4);
n2编译报错,n1可变,等号右侧为byte+int值默认int,左侧为byte,不能直接转换。 若给n1添加一个final,则n2不会报错,因为此时n1就是一个不可更改的常量,在n2的右侧就是10+127,编译器可以直接知道结果127在取值范围,所以不报错。n4输出为127,因为已经强转,结果也在byte取值范围。n3输出-128,128超出了byte取值范围8位(-128~127),把32位的int型的128 (0000 0000 0000 0000 0000 0000 1000 0000)截取低8位(1000 0000),因为高位总表示符号位,0正1负,所以为-128 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值