Java基本语法
变量
字符串类型String
练习
+
号左右两边只要存在String
,该加号的结果就是直接拼接左右两边。+
号两边不是String
,则按照正常加法运算。
例如'c' + 9 + "string"
其结果为字符c和9进行正常加法的结果,该结果再与字符串string拼接,得到最终结果。- 打印
* (tab) *
注意字符类型之间的+
号,不是和字符串类型一样做拼接,而是正常的加法运算。字符在与除字符串类型外的数据类型(包括和字符类型)进行加法时,其值为对应的Unicode
码对应的int
型数值,因此是正常的加法操作。 String
数据类型的定义需要双引号""
,不存在像基本数据类型中那种自动类型转换,即String s1 = 4
这样是错误的。
将数值类型转换为字符串类型的简单方法就是,将它们与空字符串进行拼接即可。String
数据类型与其他基本数据类型之间也不存在强制类型转换。
进制与进制之间的转换(了解)
进制
- 所有数字在计算机底层都以
二进制
形式存在。 对于整数,有4种表示方式:
二进制binary
:0,1,满2进1(这里满2的意思是满了两个数),以0b
或0B
开头表示。十进制decimal
:0~9,满10进1。八进制octal
:0~7,满8进1,以0
开头。十六进制hex
:0~9和A~F,满16进1,以0x
或0X
开头表示。此处的A~F不区分大小写。
即使我们使用不同进制,计算机最后呈现出来的还是以十进制的形式。
二进制与十进制之间的转换
- Java整数常量默认是
int
型,当用二进制定义整数时,其第32位是符号位;当是long
类型时,二进制默认占64位,第64位是符号位。 二进制的整数有如下三种形式:
- 原码:直接将一个数值转换为二进制。最高位为符号位。
- 负数的反码:是对原码按位取反。只是符号位即最高位确定为1。
- 负数的补码:其反码加1。
计算机以二进制
补码
的形式保存所有的整数。- 整数的原码、反码、补码都相同。
- 负数的补码是其反码+1。
二进制转十进制(以
byte
类型为例,即1个字节表示一个数):- 正数:由于满2进1,因此最低位的数代表几个2^0,高一位的数代表几个2^1,以此类推(由于二进制只有0,1两个数,因此每位要么有1个2的几次方,要么为0),每位计算得到的数累加就可得到十进制。(几进制转十进制都适用)。
负数:
最高位为符号位
,最高位为0表示正数,最高位为1表示负数。- 要用二进制表示一个负数,需要先得到其原码,再转换为反码,最后得到其补码,就得到了该负数的二进制表示。
- 给出一个二进制,并且最高位为1,即一个负数的二进制,转换为十进制,那么就需要倒推,因为相当于给出了一个负数的补码,这时就需要先得到反码,再得到原码,最后计算出表示的十进制的负数。
- 要用二进制表示一个负数,需要先得到其原码,再转换为反码,最后得到其补码,就得到了该负数的二进制表示。
- 正数:由于满2进1,因此最低位的数代表几个2^0,高一位的数代表几个2^1,以此类推(由于二进制只有0,1两个数,因此每位要么有1个2的几次方,要么为0),每位计算得到的数累加就可得到十进制。(几进制转十进制都适用)。
byte b = (byte)128 --> b = -128
- 可以通过
-127
的补码,-1即是-128
的补码,即可知强制转换时截断的结果就是-128
。 - 也可以通过从
128
计算其-128
的补码,由于byte
类型,因此最高位始终为1,经过转换后可以得到-128
的补码。 - 还可以这么想:
byte
类型表数范围为-128~127
,一半正数一半负数,那么多出一个0和一个-128,0的二进制表示,考虑最高位符号位,就既可以是0也可以是-128。
- 可以通过
十进制转二进制
除2取余的逆
进制的基本转换
十进制与二进制之间的转换
- 二进制转十进制:乘2的幂数。
- 十进制转二进制:除2取余数。
二进制与八进制之间的转换,二进制与十六进制之间的转换等其他各进制之间的转换
- 以与二进制之间的转换作为中间步骤。
二进制与八进制之间的转换
- 由于二进制与八进制之间是2^3的关系,因此二进制三位代表八进制1位,即二进制转八进制将二进制的三位合为八进制的1位,同理八进制转二进制时,将1位扩展为二进制的三位。
- 由于二进制与八进制之间是2^3的关系,因此二进制三位代表八进制1位,即二进制转八进制将二进制的三位合为八进制的1位,同理八进制转二进制时,将1位扩展为二进制的三位。
二进制与十六进制之间的转换
- 由于二进制与十六进制之间是2^4的关系,因此与二进制与八进制之间的转换类似,只不过是换成4位。
- 由于二进制与十六进制之间是2^4的关系,因此与二进制与八进制之间的转换类似,只不过是换成4位。
- 以与二进制之间的转换作为中间步骤。