Java核心技术
1、数值类型之间的转换
- 两个中一个是double,则另一个会转换成double类型
- 其中一个是float,另一个会转换成float
- 其中一个是long,另一个会转换成long
2、强制类型转换
double x = 9.997;
//返回最接近指定数的值,为long类型,需要强制转换成int
//因为round方法返回的是long类型,存在信息丢失的可能
int round = (int)Math.round(x);
System.out.println(round);
- 如果将一个数值 从一个类型强制转换成另一个类型,需要考虑转换成另一个数值类型的取值范围,如果超出该类型的范围则会截断成一个完全不同的值:比如(byte)128的结果是-128,因为byte的取值范围是-128 --127
3、自增,自减运算符
- ++i先运算,即先+1,用的是+1 的值
- i++先赋值,后运算,即用的是原来的 值
建议不要在表达式中用++,很容易让人困惑,而且会带来烦人bug
4、关系运算符
&&和||是按照“短路”方式求值,如果第一个操作数已经能够确定表达式的值,那么后面的就不会计算了。
5、位运算符(详情)
在计算机系统中,数字一律用补码来表示、运算和存储
- “ << " : 左移运算符,num << n, 相当于 num 乘以2的 n 次方
" >> " : 右移运算符,num >> n, 相当于 num 除以2的 n 次方
System.out.println(1<<4);//16
System.out.println(1*2*2*2*2);//16
System.out.println(16>>3);//2
System.out.println(16/(2*2*2));//2
6、字符串
-
substring(x,y)方法,从零开始计数,包头不包括尾,第二个参数是不行复制的第一个位置。很容易计算子串的长度即,y-x;
@Test public void subStringTest() { String str = "helloworld"; String substring = str.substring(1, 3);//el System.out.println(substring); }
-
一个字符串 与 非字符串进行拼接时,后者会转换成字符串
-
如果需要将多个字符串放在一起,用一个符号分割,可以使用静态join方法
@Test public void StringTest01() { String all = String.join("*","a","c","b"); System.out.println(all);//a*c*b }
-
repeat(x)将给定的字符串按照传输的值的倍数拼接(jdk11)
String repeated = "java".repeat(3); //javajavajava
-
String类型的字符串是不可变的,但是是可以共享的,当创建相同的字符串时,第二个字符串并不会真的创建而是直接从池中取。
-
要想检测两个字符串相不相等,而不区分大小写,可以使用equalsIgnoreCase();
System.out.println("hello".equalsIgnoreCase("HeLLO")); //true
面向对象
1、类
- 封装就是将数据和行为组合在一个包中,并对对象的使用者隐藏具体的实现方式。
- 封装的关键在于不能让类中的方法直接访问其他类的实例字段。其他对象只能通过对象的方法与对象进行交互。