Java基础小知识

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取余,减少步骤)则剩余秒的成分,即得到秒。