Bootstrap

数据类型与变量

数据类型与变量

1. 字面常量

常量即程序运行期间,固定不变的量称为常量

public class Main {
    public static void main(String[] args) {
                System.out.println("hello world!");
                System.out.println(10);
                System.out.println(1.11);
                System.out.println('A');
                System.out.println(true);
                System.out.println(false);
            }
       

字面常量的分类:

  1. 字符串常量:由""括起来的,比如“12345”、“hello”、“你好”。
  2. 整形常量:程序中直接写的数字(注意没有小数点),比如:100、1000
  3. 浮点数常量:程序中直接写的小数,比如:3.14、0.49
  4. 字符常量:由 单引号 括起来的当个字符,比如:‘A’、‘1’
  5. 布尔常量:只有两种true和false
  6. 空常量:null

2. 变量、

除了常量之外,对于其经常改变的内容,在Java中称为变量。而数据类型就是用来定义不同的变量的。

2.1 数据类型
数据类型关键字内存占用范围
字节型byte1字节-128~127
短整型short2字节-32768~32767
整型int4字节-231~231-1
长整型long8字节-263~263-1
单精度浮点数float4字节\
双精度浮点数double8字节\
字符型char2字节0~65535
布尔型boolean\true和false
2.2 整型变量

int不论在何种系统下都是4个字节
如:

int a = 10;
System.out.println(a);

要注意的是:
在使用变量时如果没有设置初值,编译时会报错;
在定义int性变量时,所赋值不能超过int的范围,int d = 12345678901234; 编译时会报错,因为初值超过了int的范围 。

2.3 长整型变量

长整型不论在那个系统下都占8个字节
为了区分长整型与整型,一般在 初始值后加L或l,一般为了防止1和l不好区分,建议使用L。如:

long a = 10L;
System.out.println(a);
2.4 短整型变量

short在任何系统下都占2个字节
使用时注意不要超过范围
如:

short a = 10;
System.out.println(a);
2.5 字节型变量

byte在任何系统下都占1个字节
如:

byte b = 10;
System.out.println(b);
2.6 双精度浮点型变量

double在任何系统下都占8个字节

int a = 1;
int b = 2;
System.out.println(a / b);

运行的结果并不是期望中的0.5,因为int类型除以int仍然是int,会直接舍弃掉小数部分。
所以如果需要计算这类情况,就得使用double

double a = 1.0;
double b = 2.0;
System.out.println(a / b);
2.7 单精度浮点数

float 类型在 Java 中占四个字节
由于表示的数据精度范围较小, 一般在工程上用到浮点数都优先考虑 double, 不太推荐使用 float
如:

float num = 1.0f; // 写作 1.0F 也可以
System.out.println(num);
2.8 字符型变量

Java 中使用 单引号 + 单个字母 的形式表示字符字面值
如:

char c1 = 'A'; // 大写字母
char c2 = '1'; // 数字字符
System.out.println(c1);
System.out.println(c2);

计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此
一个字符占用两个字节, 表示的字符种类更多, 包括中文
如:

char c3 = '帅';
System.out.println(c3);
2.9 布尔型变量

布尔型变量用来表示真假

boolean b = true;
System.out.println(b);
b = false;
System.out.println(b);

boolean的取值只有true和false
且 Java中boolean不能与int相互转化,不存在1代表true,0代表false的说法。

3. 类型转换

在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐
式) 和 强制类型转换(显式)。

3.1 自动类型转换(隐式)

自动类型转换指的是:在代码编译时,编译器会自动进行转换。
特点:数据范围小的转为数据范围大的时会自动进行。
如:

int a = 100;
long b = 10L;
b = a; 
a = b; 

当将a的值赋给b时,因为b的范围比a大,所以会自动将a提升为long,然后再赋值。
而若将b的值赋给a,long的范围比int大,所以会有数据丢失的风险,不安全

3.2 强制类型转换(显式)

强制类型转换指的是当需要类型转换时,代码需要经过一定的处理,不能自动完成。
特点:数据范围大的到数据范围小的。

        int a = 10;
        long b = 100L;
        a = (int)b;
        System.out.println(b);

当数据范围由大到小转换时,就需要强转,否则就会编译失败。

注意事项:

  1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型
  2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失
  3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查
  4. 强制类型转换不一定能成功,不相干的类型不能互相转换
4. 类型提升

当不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。
如:

int a = 10;
long b = 20;
int c = a + b; 

当计算int c = a+b时,会导致变为long + long再赋值给iint型,这样会导致数据丢失。
所以应该写为long c = a + b;

byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);

在运算byte类型时,即使byte和byte是相同类型,但也会导致编译出错。这是因为虽然a和b都是byte,但在计算时,会将byte自动转化为int再进行计算,最后的结果也是int赋给c,这样就会导致出错。
正确写法:

byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);
;