Java学习笔记:数据类型和运算符

byte、boolean : 一个字节8位
char、short : 两个字节16位
int、float : 四个字节32位
double、long : 八个字节64位


1.Java文件的命名必须满足如下规则:
Java程序源文件的后缀名必须是.java.
通常情况下,Java程序源文件的主文件名可以是任意的。但有一种情况例外:如果Java程序源代码里定义了一个public类,则该源文件的主文件名必须与该public类的类名相同。
eg:因此,一个Java源文件里最多只能定义一个public类.


2.建议:
一个Java源文件只定义一个类,不同的类使用不同的源文件定义。
将每个源文件中单独定义的类都定义成public
保持Java源文件的主文件名与该源文件中定义的public类同名


3.Java程序里的关键字全部都是小写的。


4.定义main函数前面的public和static修饰符可以互换位置


5.System.out.print(); System.out.println(); 有没有换行的区别


6.Java语言不需要程序员直接控制内存回收,Java程序的内存分配和回收但是由JRE在后台自动进行的。JRE会提供一条超级线程来进行检测和控制,一般都是在CPU空闲或内存不足时自动进行垃圾回收,而程序员无法精确控制垃圾回收的时间和顺序等。


7.Java有单行注释、多行注释、文档注释

8.Java整数常量默认就是int类型。
如果直接将一个较小的整数常量(在byte或short类型的表数范围内)赋给一个byte或short变量,系统会自动把这个整数常量当做byte或者short类型来处理。
如果使用一个巨大的整数常量(超出了int)类型的表数范围)时,Java不会自动把这个整数常量当做long类型来处理。如果希望系统把一个整数常量当做long类型来处理,应在这个整数常量后增加l或者L作为后缀。通常推荐使用L,因为l很容易跟1搞混。
// 下面代码是正确的,系统会自动把56当做byte类型处理
byte a = 56;
/*
下面代码是错的,系统不会把9999999999999999999当做long类型处理,
所以超出int的表数范围,从而引起错误
*/
long bigValue = 99999999999999999;
// 下面代码是正确的,在巨大的整数常量后使用L后缀,强制使用long类型
long bigValue = 999999999999999L;


9. Java中整数常量有3种表示方法:10进制、8进制、16进制,其中8进制的整数常量以0开头,16进制的整数以0x或者0X开头。


10. Java可以使用Unicode值来表示字符常量,格式是’\uXXXX’, 其中XXXX代表一个16进制的整数。(‘\u0000’~’\uFFFF’)


11. 如果把一个在0~65535范围内的int整数赋给char类型的变量,系统会自动把这个int整数当做char类型来处理。


12. String
初始化(两种初始化的方法效果是一样的。)
1.String str = “abc”;
2.char data[] = {‘a’, ‘b’, ‘c’}; 
 String str = new String(data);
substring(l1, l2);
截取字符串中l1(包括l1)到l2(不包括l2)之间的内容
如果l1,l2的数值超出了字符串的范围,则会抛出异常



13. 如果需要精确保存一个浮点数,可以考虑使用BigDecimal类
    Java语言的浮点型默认是double型,如果要表示float则要在这个浮点型值后紧跟f或F。


14. 正无穷大:Double(Float).POSITIVE_INFINITY
    负无穷大:Double(Float).NEGATIVE_INFINITY
    非数:Doble(Float).NaN
    所有的正无穷大和负无穷大都是相等的
    所有的非数NaN都是不同的 NaN != NaN
    只有浮点数除以0才能得到无穷大数
    整数除以0会抛出异常


15. 在Java语言中,boolean类型的数值只能是true和false,不能用0或者非0来代表
    其他基本数据类型的值也不能转换成boolean类型
    使用一个boolean型的值和字符串进行连接运算,则boolean型的值就会自动转换成字符串


16. 当把任何基本类型的值和字符串值进行连接运算时,基本类型的值将自动类型转换成为字符串类型。
    3 + 4 + “Hello!” —> 7Hello!
    “Hello!” + 3 + 4 —> Hello!34


17. 获取一个随机数 Math.random();  // 生成一个0~1(不包括1)之间的浮点数
    生成一个0~25的数 Math.random() * 26;
    eg: 生成一个6位的随机字符串
    String result = “”;
    for (int i = 0; i < 6; i++) {
int intValue = (int)(Math.random() * 26 + 97);
result = result + (char)intValue;
    }


18. Java为8种基本类型都提供了对应的包装类:
boolean : Boolean
byte : Byte
short : Short
int : Integer
long : Long
char : Character
float : Float
double : Double
8个包装类都提供了一个parseXXX(String str)的静态方法用于将字符串转换成基本类型。
eg: String str = “123”;
   int intValue = Integer.parseInt(str);


19. 表达式类型的自动提升:
    1.所有byte型、short型和char型将被提升到int型
2.整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。
(int > long > float > double)
eg1:  short sValue = 5;
     int a = sValue - sValue;(因为short型被提升到int型)
    eg2:  int val = 3;
     int intResult = 23 / val;
     // intResult的值是7(因为右边表达式的最高类型是int,所以右边表达式的类型就是int)


20. ==:等于,如果进行比较的两个操作数都是数值型,即使它们的数据类型不相同,只要它们的值相等,都将返回true。
      例如:97 == ‘a’返回true, 5.0 == 5 也返回true。
如果两个操作数都是引用类型,只有当两个引用变量引用的相同类的实例时才可以比较,而且必须这两个引用指向同一
个对象才会返回true。
String s1 = “a”;
String s2 = “a”;
s1 == s2 返回true;
String s1 = new String(“a”);
String s2 = new String(“a”);
s1 == s2 返回false


21. Integer ina = 2;
    Integer inb = 2;
    ina == inb; true
    Integer biga = 128;
    Integer bigb = 128;
    biga == bigb; false
    是因为:
    // 定义一个长度为256的Integer数组
static final Integer[] cache = new Integer[-(-128) + 127 + 1];
static {
// 执行初始化,创建-128到127的Integer实例,并放入cache数组中
for (int i = 0; i < cachee.length; i++) {
cache[i] = new Integer(i - 128);
}
}
     所以如果把一个-128~127之间的整数自动装箱成Integer实例时,实际上是直接指向对应的数组元素,因此-128~127至之间的同一个整数自动装箱成Integer实例时,永远都是引用cache数组的同一个数组元素,所以他们全部相等;但每次把一个不再-128~127范围内的整数值自动装箱成Integer实例时,系统总是重新创建一个Integer实例,所以出现程序中的运行结果。


22. |(&) 和 ||(&&)的区别
|(&) : 不短路逻辑 : 如果第一个操作数就满足的话第二个操作数还是会判断
||(&&) : 短路逻辑 : 如果第一个操作数就满足的话第二个操作数就没有判断的机会

你可能感兴趣的:(java,数据类型,运算符)