Java修知识
Java基础小知识
- 1、赋值运算符 += 和 + 的区别
- 2、位运算符
- 3、String和int的转换
- 4、大数相乘题:BigInteger类的使用
- 5、switch表达式支持的数据类型
- 6、 continue label 和 break label
- 7、 外部类和内部类
- 8、String类的CompareTo方法
- 9、打印对象内存地址(虚拟!)
- 10、 == 和 equal的区别
- 11、位运算符
- 12、时间计量小技巧
1、赋值运算符 += 和 + 的区别
char c =66;
int i=2;
c+=(char)i;//不报错
c=c+(char)i;//报错
- +=会把计算的结果强制转换成运算符左边被赋值变量的类型
- +就是通常所说的 直接相加 当使用+时,i先被转换为和c相同的类型进行相加操作,char并不能直接进行+操作,它会被编辑器转化为ASCILL码进行相加,此时,右侧类型与左侧类型不同的赋值操作,所以报错。
2、位运算符
负数在计算机中使用补码进行存储,正数原码进行储存,
在计算机的世界里,0是正数
5&2 = 0;
如果相对应位都是1,则结果为1,否则为0
7|3 = 7;
如果相对应位都是0,则结果为0,否则为1
10^2=8;
如果相对应位值相同,则结果为0,否则为1
参考文章:https://www.cnblogs.com/cancantrbl/p/16028635.html
3、String和int的转换
String->int
String s = "";
int i = Integer.parseInt(s);//直接使用静态方法,不会产生多余的对象,但会抛出异常
i = Integer.parseInt(s,[int radix]);// s转换为r进制
int->String
int i = 0;
String s = String.valueOf(i);//1.直接使用String类的静态方法,只产生一个对象
String s = Integer.toString(i);//2.
String s = "" + i;//3.会产生2个String对象
注: Double, Float, Long 转换的方法大同小异.
参考文章:https://www.cnblogs.com/panxuejun/p/6148493.html
4、大数相乘题:BigInteger类的使用
https://blog.csdn.net/weixin_44259720/article/details/87002816
5、switch表达式支持的数据类型
switch表达式后面的数据类型只支持byte,short,int整形类型、字符类型char、枚举类型和java.lang.String类型
参考文章:https://www.cnblogs.com/HDK2016/p/6854671.html
6、 continue label 和 break label
用于一个跳出多个循环到指定位置,类似goto,最好不要用!
参考文章:https://blog.csdn.net/bestlove1990/article/details/47836359
7、 外部类和内部类
参考文章:https://www.cnblogs.com/ldl326308/p/9477566.html
8、String类的CompareTo方法
如果第一个字符和参数的第一个字符不等,结束比较,返回第一个字符的ASCII码差值。
如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至不等为止,返回该字符的ASCII码差值。 如果两个字符串不一样长,可对应字符又完全一样,则返回两个字符串的长度差值。
参考文章:https://www.runoob.com/java/java-string-compareto.html
9、打印对象内存地址(虚拟!)
System.out.println(System.identityHashCode(str));
参考文章:https://blog.csdn.net/qq_21963133/article/details/80624091
10、 == 和 equal的区别
== 的作用:
基本类型:比较的就是值是否相同
引用类型:比较的就是地址值是否相同
equals 的作用:
引用类型:默认情况下,比较的是地址值。
注:不过可以根据情况重写该方法。一般重写都是自动生成,比较对象的成员变量值是否相同
参考文章 :https://zhuanlan.zhihu.com/p/78395057
11、位运算符
M << n 其实可以这么算 M << n = M * 2的n次方
M >> n 其实可以这么算 M >> n = M * 2的n次方
二进制补码转化十进制数的方法: 先保持符号位不变安位取反,再+1,再转10进制
12、时间计量小技巧
Java中的浮点数是向下取整,当想要它四舍五入的时候可以 +0.5 ;
巧用取模运算把秒等转化成---小时:分钟:秒
小时 = 时间段/3600; 分钟: 时间段先对3600取余,这个操作会将3600的整数倍消去(消去小时元素),也即对应上面这个操作(时间段-小时 * 3600),得到剩余再除以60,得到分钟数。 秒: 同上理由,本需要先对3600取余(消去小时),在对60取余(消去分钟),但实际可以简化成:只对60取余,则同时会消去小时的成分(不需要先对3600取余,再对60取余,减少步骤)则剩余秒的成分,即得到秒。