1.字面值常量
http://www.cnblogs.com/hwaggLee/p/4507968.html
字面值大体上可以分为整型字面值、浮点字面值、字符和字符串字面值、特殊字面值。
- 整形字面值
一般情况下,字面值创建的是int类型,但是int字面值可以赋值给byte short char long int,只要字面值在目标范围以内,Java会自动完成转换,如果试图将超出范围的字面值赋给某一类型(比如把128赋给byte类型),编译通不过。而如果想创建一个int类型无法表示的long类型,则需要在字面值最后面加上L或者l。通常建议使用容易区分的L。所以整型字面值包括int字面值和long字面值两种。- 浮点字面值
分为float字面值和double字面值,如果在小数后面加上F或者f,则表示这是个float字面值,如11.8F。如果小数后面不加F(f),如10.4。或者小数后面加上D(d),则表示这是个double字面值。- 字符及字符串字面值
Java中字符字面值用单引号括起来,如‘@’‘1’。
字符串字面值则使用双引号,字符串字面值中同样可以包含字符字面值中的转义字符序列。
2. char类型大小
16bit,两个字节。
1 | /** |
3. 变量使用之前一定要初始化。
可以不在定义是初始化,但一定要在使用之前初始化
4. &和|用于布尔值
&&,|| 和&,| 用于boolean的差别在于,前者有短路特性,后者没有。
用于整数。
而在C++中&和|都是按照整数处理的。
5. >>>和>>,C++中的右移位
>>>表示算术移位,>>表示逻辑移位。
C++中,无符号数逻辑右移,有符号数算术右移。
6. char如何转换int
char转换int返回code point。
7. 类型转换
int转换float,int转换double,long转换double都会有精度丢失。但是可以进行自动转换,无需强制转换。
两个数值类型进行计算时,如果类型不匹配,会将”低类型””转化为”高类型”,然后在进行计算。
如果有一个为double,转换另一个为double
否则,如果有一个为float,转换另一个为float
否则,如果有一个为long,转换另一个为long
否则,都转换为int。
不要使用Boolean转换类型
8. string类对象不可变字符串
String对象创建的时候,
- 如果直接用字符创字面值常量创建,如:
String s = "abc"
,如果string literal pool(常量池)中不存在”abc”这个对象,那么会创建一个对象,如果存在,则不会创建; - 如果new String(),那么总共会创建两个对象,一个对象为字面值常量本身,另一个为单独的字符串对象。
参考:http://www.cnblogs.com/javaminer/p/3923484.html
9. code point 和 code unit
String length()返回的是code unit的数量。
codePointCount()可以返回code point 的数量。
charAt(n)返回位置为n的code unit。
codePointAt(n) 返回位置为n的code point。
这种差别会在一些字符上表现出来,UTF-16 - Wikipedia上可以找到两个字符,’𐐷’和’𤭢’都是由两个code unit来表示的。
10. StringBuilder和SttingBuffer
这两个类的对象是可以被修改的,与String不同。两个类 的API相同。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
11. Console类
Console类可以用来从控制台读取密码,输入不可见。
https://docs.oracle.com/javase/7/docs/api/java/io/Console.html
12. printf对日期处理,参数下标
JAVA 中增加了printf对日期的格式化。
支持参数下标,实现一个参数多次使用。
这两种方式输出是相同的:
1 | System.out.printf("%1$s %2$tB %2$te, %2$tY","date:",new Date()); |
13. Scanner读文件PrintWriter写文件
1 | Scanner scanner = new Scanner(Paths.get("a.txt")); |
14. 不能在嵌套的块中定义同名变量
与 C++ 不同,C++ 中定义的同名变量外层会被内层覆盖,而JAVA是不允许的。
15. 带标签的break,continue
JAVA中为了支持goto,break可以带标签,该语句会跳到标签定义处,可以实现跳到外层循环。
continue也可以跳到标签指定处。
16. 命令行参数第一个参数
C++中命令行参数的第一个参数为文件名,而JAVA是不会将文件名计算在参数内的。
17. 数组
- 数组也是会存放在常量池中的,所以用 = 赋值个另一个数组变量时,两者指向同一个引用。修改一个另一个也会变化。如果想要拷贝一个新的数组,可以用
Arrays.copy()
。 - for each 不能自动处理多维数组
- deepToString()快速打印多维数组。
- JAVA多维数组长度可以不相等,多维数组中,每个元素存的都是另一个数组的引用。