FKJAVA读书笔记--第三章--数据类型和运算符

来源:互联网 发布:淘宝达人账号简介范例 编辑:程序博客网 时间:2024/05/16 11:02

1 有时候把从char型称为字符型,实际上字符型是一种整数类型;并且Char类型必须使用单引号括起来。

 

2 空引用(null)只能转换成引用类型,不能转换成基本类型(boolean类型和数值类型)

 

3 如果使用一个巨大的整数常量(超出了int类型),即使使用“long=XXXXXX”,java也不会把这个当作long类型来处理,如果希望系统把一个常量当成long处理,需要在这个巨大的整数常量后面加l 或者L ,推荐使用L

 

4 Btye 内存中占8位 -2^(-7)~2^7-1

 Short 内存中占16位 -2^(-15)~2^15-1

 int  内存中占32位  -2^(-31)~2^31-1

 Long 内存中占64位 -2^(-63)~2^63-1

 

5 // 八进制标示,第一位为0

int ss=013;

 // 十六进制标示 ,以0X标示

int sss=0x11;

// 二进制表示  以0B或者0b

int ssss=0b1111;

 

6 补码的计算原则:正数的补码和原码完全相同,负数的补码是其反码加1;反码是对原码按位取反,只是最高位(符号位)保持不变。

当定义32位的二进制整数时,最高位其实是符号位,

如果在此二进制整数后面加L,此时这个二进制正数是64位。此时第32位就不是符号位了。

如果将一个二进制正数强制转换成byte类型。它就变成了8位,此时其第8位为符号位。

 0120000====》其实是32位,左边的高位在底层全部用0补齐了

(byte)0000111111111111110===》会强制保留从右到左保存8位==》(byte)011111110

 

7 Java使用16位的unicode字集作为编码方式。

 

8 char类型的值可以直接用16位整数类型的值来使用,表数范围0~65535;???

 如果把0~65535范围内的一个int整数型给char类型变量。系统会自动把整型当成char来处理。

 

9 转义字符 \b  \n  \r  \t \” \’ \\   要用到“\”

 

10 强类型包括:1.所有的变量必须先声明再使用。2.指定的类型变量只能接受能与之匹配的变量值。

 

11 strictfp 关键字:使用 strictfp 关键字声明一个方法时,该方法中所有的float和double表达式都严格遵守FP-strict的限制,符合IEEE-754规范。当对一个类或接口使用 strictfp 关键字时,该类中的所有代码,包括嵌套类型中的初始设定值和代码,都将严格地进行计算。

Java中如果需要精确的保存一个浮点数,则可以考虑使用BigDecimal类。

 

12 Volatile关键字:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。  

 

13 transient关键字:为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient;

 

14 当从磁盘中读出某个类的实例时,实际上并不会执行这个类的构造函数,而是载入了一个该类对象的持久化状态,并将这个状态赋值给该类的另一个对象。

 

15 自动类型转换:小瓶子子里的水倒进大瓶子里面,不会有问题

Char->int->long->float->double

Byte->short->int->long->float->double

 

16 强制类型转换:大瓶子里的水倒进小瓶子会有溢出的情况。从而造成数据的丢失。(缩小转换)

   

17 任何基本类型值和字符串做连接运算后,都会变成字符串类型。虽然字符串类型不是基本类型,而是引用类型。

 

18 java为8种基本类型提供了对应的包装类

 

19 表达式类型会自动进行类型提升,提升成表达式中最高级别

 

20 直接量:直接量是指在程序中通过源码直接生成指定的值,java支持3种类型可以进行直接量的赋值:基本类型,字符串类型,null;

我对直接量的理解,即不用new出实例,即可以使用

 

21 关于字符串的直接量,当第一次使用某个字符串直接量时,java会在常量池constant pool中缓存此字符串直接量,以后再使用时,会直接从constant pool中取。

Java会保证每个字符串常量只有一个,这样不会重复产生字符串常量。“hello”  和“he”+“llo 是一样的。

 

22 String类是不可变类。所以无需当心共享String会导致混乱。

 

23 /:除法运算符:如果两个操作数都是整型,那么结果也是整型。。如果除得的结果是4.7,只会取整数部分。并且其除数不能为0;

    如果两个操作数有一个为浮点数,那么结果就是真实的结果,并且除数也可以是0或者0.0,得到无穷大或者无穷小Infinity、-Infinity

 %:取余运算符:求余的结果不一定总是整数,其原理和除法相似。 

    如果被取余的那个数是非零的,并且两个操作数中有浮点数,求余结果将是NaN,  0/0.0对零以外所有的数取余都为0;

 

24 a++ 先进行运算再自加      ++a 先自加再进行运算  (--自减同理)

自加只能用于操作变量,不能用于操作直接量或者常量

 

25 Java没有提供复杂的运算符,需要复杂的运算可以利用java。Lang。Math类进行。

 

26 + :加法运算符/字符串连接运算符     - :减法运算符/求负的运算符

 

27 位运算符:&-》按位与  |-》按位或  ~-》按位非  ^->按位异或  <<左移运算符  >>右移运算符  >>>无符号右移动运算符

移位操作不会改变操作数本身,只是会生成一个新的操作数

 

28 二进制运算都是通过补码进行运算,正数的补码,原码,反码一样。

负数的原码取反获得反码,反码加1获得补码补码的目的是为了让符号位也参与进运算中,不会出现-0的状况

 

29 对于int类型,移位33位和1位效果一样。。

对于long类型,移位65位和1位效果一样。。

 

30 推荐使用扩展运算符,扩展运算符虽然在结果上与一般的运算符是一样,但是它的效率更高,并且可以避免一些错误“+=”。

 

31 如果两个引用类型之间没有父子继承关系,那么他们也不能使用==进行比较是否相等。

 

32 ”|”    “||”      “&”  “&&” 功能上一样,只是存在一个短不短路的概念 ,短路的概念就是,如果有一个条件满足了就不会判断后面了

 

33 三目运算符 ternary operator :(expression)?If-true-statement:if-false-statement

(不支持多条件判断)

0 0