【黑马程序员】java学习笔记之常量与变量

一.常量

1.定义:常量表示不能改变的数值。

2.Java中常量的分类

     1. 整数常量: 所有整数。

  2. 小数常量: 所有小数。

  3. 布尔(boolean)型常量: 只有两个数值, true、 false。

  4. 字符常量: 将一个数字字母或者符号用单引号( ' ' )标识, 如: 'a'。

  5. 字符串常量: 将一个或者多个字符用双引号("")标识, 如: "hello world"、 "a"、 ""( 空字符串) 。

  6. null常量: 只有一个数值就是: null。
3.进制的由来

对于整数,有四种表现形式:

二进制: 0-1, 满2进1。
八进制: 0-7, 满8进1, 用0开头表示, 如: 012。
十进制: 0-9, 满10进1。
十六进制: 0-9, A-F, 满16进1, 用0x开头表示。 如: 0x4A2C。

任何数据在计算机中都是以二进制的形式存在的, 二进制早期由电信号开关演变而来。 一个整数在内
存中一样也是二进制的, 但是使用一大串的1或者0组成的数值进行使用很麻烦。 所以就想把一大串缩短
点, 将二进制中的三位用一位表示。 这三位可以取到的最大值就是7, 超过7就进位了, 这就是八进制。
但是对于过长的二进制变成八进制还是较长, 所以出现的用4个二进制位表示一位的情况, 四个二进制位
最大是15, 这就是十六进制。
规律: 进制越大, 表现形式越短。

P.S.
1Byte = 8bit
1KiB = 1024Byte
1MiB = 1024KiB
1GiB = 1024MiB


4.进制的基本转换

1). 十进制转二进制。
原理: 对十进制数进行除2运算。
示例:求十进制数6的二进制数。
6/2 = 3 余0
3/2 = 1 余1
1/2 = 0 余1
故, 6( 十进制) = 110( 二进制) 。
2). 二进制转十进制。
原理: 二进制乘以2的过程。
示例: 求二进制数110的十进制数。
110 = 0*2( 0) +1*2( 1) +1*2( 2) = 0 + 2 + 4 = 6
附: 括号中的数值代表次方。
示例: 求二进制数00110101的十进制数。
    0  0  1  1 0 1 0 1
  128 64 32 16 8 4 2 1
------------------------------
= 32 * 1 + 16 * 1 + 4 * 1 + 1 * 1 = 53
示例: 二进制加法, 5 + 4 = 9。
  1 0 1
+ 1 0 0
------------
1 0 0 1
3). 十进制转八进制。
原理: 八进制, 其实就是二进制位, 3个二进制位, 1个八进制位。
示例: 求十进制数43的八进制数。
十进制 43
二进制 101011
三位分割 000-101-011
八进制 0 5 3
因此, 43( 十进制) = 101011( 二进制) = 053( 八进制) 。
4). 十进制转十六进制。
原理: 十六进制, 其实就是二进制位, 4个二进制位, 1个十六进制位。
示例: 求十进制数43的十六进制数。
十进制 43
二进制 101011
四位分割 0010-1011
十六进制 2(2) 11(B)
因此, 43( 十进制) = 101011( 二进制) = 0x2B( 十六进制)
5) 负数的进制
原理: 负数的二进制表现形式就是对应的正数二进制取反加1。
示例: 求-6的二进制表现形式, 其实就是对应的正数6的二进制取反加1。
             6
     0000-0110
取反 1111-1001
加1 +0000-0001
-------------------
1111-1010
P.S.
负数的二进制最高位永远是1。


二。变量

1.定义
定义:内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型), 该区域的数据可以在同一类型范围内不断变化。
特点: 变量其实就是将不确定的数据进行存储, 也就是需要在内存中开辟一个空间。


为什么要定义变量?
用来不断的存放同一类型的常量, 并可以重复使用。


定义变量的格式:
数据类型 变量名 = 初始化值;
例如: byte b = 3;


P.S.
1、 格式是固定的, 记住格式, 以不变应万变。
2、 变量的作用范围( 一对{}之间有效) 。
3、 变量只能存放某一类型的数据

理解:
变量就如同数学中的未知数X



2.Java语言的数据类型
Java语言是强类型语言, 对于每一种数据都定义了明确的具体数据类型, 在内存中分配了不同大小的
内存空间:
byte 1个字节
short 2个字节
int 4个字节
long 8个字节
float 4个字节
double 8个字节
char 2个字节
Java语言的数据类型包括8种基本类型, 3种引用类型。



P.S.
1、 整数默认类型:int类型,小数默认类型:double类型。
2、 double类型的小数精度比float类型的小数更高。


3.类型转换
类型转换在开发中也很常用, 简单来说就是类型之间相互的转化, 类型转换共分两种, 自动类型转换
和强制类型转换。

1). 自动类型转换( 隐式类型转换)
定义: 自动类型转换就是不需要我们手动对类型来进行强制转换。
示例:
class VarDemo
 {
   public static void main(String[] args){
     int x = 3;
     byte b = 5;
     x = x + b;
     System.out.println(x);
    }
}
说明: int类型的变量占4个字节, 当byte类型的变量与其相加的时候, 首先会将byte类型的变量自动
转化为4个字节的int类型, 然后再进行加法操作。

2). 强制类型转换( 显式类型转换)
定义: 强制类型转换需要把类型进行手动转换, 否则无法正常使用。
示例:
class VarDemo
{
   public static void main(String[] args) {
       byte b = 3;
       b = b + 200;
       System. out. println(b);
 }
}
运行结果:错误,
错误原因:当byte类型的变量提升为int类型与int类型的常量200相加后,结果依然是int类型,再赋值给byte类型,当然会出现损失精度的错误。
解决方法:进行强制类型转换,也就是将占4个字节的int类型值,再强硬存储到占1个字节的byte变量中。

代码如下:
class VarDemo
{
   public static void main(String[] args) {
      byte b = 3;
      b = (byte) (b + 200);
      System. out. println(b);
  }
}

P.S.
1、只有数值类型才能进行加法操作, 非数值类型不行。
2、char类型数据也可以和int类型相加, 但是首先char类型数据会被自动提升为int类型。
3、通过强转也可以把数字强转成字符。
4、所有的byte型、 short型和char的值将被提升到int型。
   如果一个操作数是long型, 计算结果就是long型;
   如果一个操作数是float型, 计算结果就是float型;
   如果一个操作数是double型, 计算结果就是double型。



难题:说出以下程序错误的原因。
class VarDemo
 {
    public static void main(String[] args){
      byte b = 3 + 7;
      byte b1 = 3;
      byte b2 = 7;
      b = b1 + b2;
      System.out.println(b)
    }
}
运行结果:





错误原因涉及到编译器编译程序时候的细节,之所以byte b = 3 +7;,没有报错,是因为3和7都是常量,编译器知道结果是10,并且在byte范围之内,因此就自动进行了强转,所以不会报错。而b = b1+ b2;中b1和b2都是变量,编译器编译程序是一行一行编译的,它根本不知道b1和b2到底是多少,两个byte类型的数据相加时,首先都会被提升为int类型,他们的和也是int类型,其值可能会超过byte的范围,因此就会报错。

















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值