Java-数据类型

Java-数据类型

  • 一、字面常量
  • 二、数据类型
    • (1)基本数据类型
  • 三、变量
    • 1、变量概念
    • 2、语法格式
      • (1)语法:
      • (2)示例:
    • 3、整型变量
      • (1)整型变量(int)
        • a.语法
        • b.最大值与最小值
        • c.注意
      • (2)长整型变量(long)
        • a.语法
        • b.最大值与最小值
        • c.注意
      • (3)短整型变量(short)
        • a.语法
        • b.最大值与最小值
        • c.注意
      • (4)字节型变量(byte)
        • a.语法
        • b.最大值与最小值
        • c.注意
    • 4、浮点型变量
      • (1) 双精度浮点型
        • a.语法
        • b.最大值与最小值
        • c.注意
      • (2)单精度浮点型
        • a.语法
        • b.最大值与最小值
        • c.注意
    • 5、字符型变量
        • a.语法
        • b.最大值与最小值
        • c.注意
    • 6、布尔型变量
        • a.语法
        • b.注意
    • 7、 类型转换
      • (1)自动类型转换(隐式转换)
      • (2)强制类型转换(显式转换)
      • (3)转换时的注意事项
      • (4)类型提升
        • int 与 long之间
        • byte与byte之间
        • 总结
  • 四、字符串变量
    • 1、字符串拼接
    • 2、int转String
    • 3、String转int

一、字面常量

字面常量顾名思义就是固定不变的量。
比如:

public class Demo{
		public static void main(String[] args){
		System.Out.println("hello world!");
		System.Out.println(100);
		System.Out.println(3.14);
		System.Out.println('A');
		System.Out.println(true);
		System.Out.println(false);
		}
}

在上面的代码中,helloworld1003.14等都是常量。那么根据这些常量的不同类型,可以将字面常量分为:

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

二、数据类型

在Java中数据类型分为两大类:基本数据类型引用数据类型

(1)基本数据类型

基本数据类型分为四大类:整型、浮点型、字符型以及布尔型
这四大类可以细分为八种
Java-数据类型_第1张图片
这里我们需要做几点说明,用来区别我们之前学过的C语言。

在C语言中,部分数据类型在32位电脑和64位电脑中是存在一定差异的。但是java中的数据类型不论是32位还是64位,都不会发生改变,这也就是可移植性的体现,如果大家阅读了作者上一章的内容:JavaSE介绍与第一个Java程序的话,就知道这种可移植性是与java的虚拟机有关的。

同时,整型和浮点型都是有符号的。

三、变量

1、变量概念

在我们的java程序中,除了有始终不变的字面常量外,还有一些量是变量,这些变量也是有分类的,比如有的变量是浮点数,有的变量是字符,因此刚刚介绍的数据类型就是来定义不同种类的变量的。

2、语法格式

(1)语法:

方式1:

数据类型 变量名 = 初始值;

当然也可以分开写:
方式2:

数据类型 变量名;
变量名 = 初始值;

如果我们要定义很多相同数据类型的变量,我们也可以采取以下方式:
方式3:

数据类型 变量名1 = 初始值1,变量名2 = 初始值2,变量名3 = 初始值3,...;

(2)示例:

方式1

int a = 10;
double b = 2.3;
char c = 'c';

方式2

int a;
a = 10;

double b;
b = 20.1;

方式3

int a1 = 1, a2 = 2, a3 = 3;

3、整型变量

(1)整型变量(int)

a.语法
\\方式1
int a1 = 1;
\\方式2
int a2;
a2 = 2;
b.最大值与最小值

我们可以用以下方式输出int的最大值和最小值。

//最大值
System.out.println(Integer.MAX_VALUE);
//最小值
System.out.println(Integer.MIN_VALUE);
c.注意
  • 使用未初始化的变量会发生报错
  • 如果没有合适的初始值,可以先赋值为0。
  • 在给int赋值的时候,如果超过了int的范围,则会发生报错。
  • int的包装类型为 Integer。

(2)长整型变量(long)

a.语法
\\方式1
long a1 = 1L;
\\方式2
long a2;
a2 = 2L;

这里要在数值的后面加字母L,因为整型的字面常量默认是int类型的,因此如果我们给long类型的变量赋上超过int范围的数字的话,会出现报错,所以我们需要将字面常量转化为长整型。

b.最大值与最小值
//最大值
 System.out.println(Long.MAX_VALUE);
//最小值
System.out.println(Long.MIN_VALUE);
c.注意
  • long类型的赋值需要给数字加上L
  • 长整型不论在那个系统下都占8个字节。
  • long的包装类型为Long。

(3)短整型变量(short)

a.语法
\\方式1
short a1 = 1;
\\方式2
short a2;
a2 = 2;

short不需要将字面常量的int转化为short,因为short的范围比int小,所以我们不会遇到超过int范围的赋值情况。

b.最大值与最小值
//最大值
System.out.println(Short.MAX_VALUE);
//最小值
System.out.println(Short.MIN_VALUE);i
c.注意
  • short在任何系统下都占2个字节。
  • 使用时注意不要超过范围(一般使用比较少)。
  • short的包装类型为Short。

(4)字节型变量(byte)

a.语法
\\方式1
byte b1 = 10;
\\方式2
byte b2;
b2 = 10;
b.最大值与最小值
//最大值
System.out.println(Byte.MIN_VALUE);
//最小值
System.out.println(Byte.MAX_VALUE);
c.注意

4、浮点型变量

(1) 双精度浮点型

a.语法
double d1 = 1.0;
double d2;
d2 = 2.0;
b.最大值与最小值
//最大值
System.out.println(Double.MAX_VALUE);
//最小值
System.out.println(Double.MIN_VALUE);
c.注意
  • double在任何系统下都占8个字节。
  • double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。
    为了证明这一点,我们可以运行以下代码:
public class HelloWorld {
    public static void main(String[] args) {
        double d1 = 1.1;
        double d2 = 1.1;
        System.out.println(d1 * d2);
    }
}

我们会发现运行结果为:
在这里插入图片描述

  • double的包装类型为Double。
  • 在运算过程中只有至少存在一个浮点数的时候,结果才是浮点数。

(2)单精度浮点型

a.语法
//方式1:
float a1 = 1.2f;
//方式2:
float b1;
b1 = 2.1f;
b.最大值与最小值
//最大值
System.out.println(Float.MAX_VALUE);
//最小值
System.out.println(Float.MIN_VALUE);
c.注意
  • 浮点型的字面常量默认是double类型的,所以如果我们想给浮点型赋值的话,我们需要在字面常量的后面加上字符f
  • float 类型在 Java 中占四个字节, 同样遵守 IEEE 754 标准. 由于表示的数据精度范围较小, 一般在工程上用到浮点数都优先考虑 double, 不太推荐使用 float. float的包装类型为Float。

5、字符型变量

a.语法
//方式1:
char a1 = 'a';
//方式2:
char a2;
a2 = 'b';
b.最大值与最小值
 System.out.println(Character.MAX_VALUE);
 System.out.println(Character.MIN_VALUE);
c.注意
  • 计算机中的字符本质上是一个整数。在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符占用两个字节, 表示的字符种类更多, 包括中文。
  • char的包装类型为Character。

6、布尔型变量

a.语法
//方式1:
boolean b1 = true;
//方式2:
boolean b2;
b2 = false;
b.注意
  • boolean 类型的变量只有两种取值, true 表示真, false 表示假。
  • Java 的 boolean 类型和 int 不能相互转换,== 不存在 1 表示 true, 0 表示 false 这样的用法==。
  • Java虚拟机中并没有明确地规定boolean类型占几个字节,也没有专门用来处理boolean的字节码指令,在Oracle公司的虚拟机实现中,boolean占1个字节。
  • boolean的包装类型为Boolean。

7、 类型转换

Java是一个强类型的语言,即当不同类型之间的变量相互赋值的时候,会有严格的类型校验规则。

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

(1)自动类型转换(隐式转换)

什么叫自动类型转换?自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。
那么什么情况下会进行自动类型转换呢?
当我们将数据范围小的转为数据范围大的时候,编译器会自动进行类型转换。
比如下面的代码:

public class HelloWorld {
    public static void main(String[] args) {
        int a = 100;
        long b = 200;
        b = a;//将int赋值给long,int会自动转化为long
    }
}

那么如果我们反过来呢?我们将long赋值给int,那么此时由于是需要将long转换为int,即大范围转小范围的过程,所以此时不会发生自动类型转换,编译器会出现报错。
如下图所示:
Java-数据类型_第2张图片

(2)强制类型转换(显式转换)

强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。
特点:数据范围大的到数据范围小的时候,需要我们手动将大类型转化为小类型,转化的语法即我们在被转变量前加上(小范围的数据类型)
示例如下:

public class HelloWorld {
    public static void main(String[] args) {
        int a = 1;
        long b = 2;
        a = (int)b;
        byte b1 = (byte) 12456;
        double d1 = 3.14;
        float f1 = (float)d1;
    }
}

(3)转换时的注意事项

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

(4)类型提升

类型提升是指在进行表达式运算的时候,数据类型小的会被提升到数据类型大的

int 与 long之间
public class HelloWorld {
    public static void main(String[] args) {
        int a = 10;
        long b = 20;
        long c = a + b;//int + long表达式,int会被提升到long类型,所以转化成了long+long,结果也为long
        int d = a + b;//结果也为long,但是long结果给int需要强制类型转换,不转换会报错。
    }
}
byte与byte之间
public class HelloWorld {
    public static void main(String[] args) {
        byte a = 30;
        byte b = 120;
        byte c = a + b;//出现报错,java: 不兼容的类型: 从int转换到byte可能会有损失
    }
}

为什么byte之间的运算还与int的转化有关呢?

byte 和 byte 都是相同类型, 但是出现编译报错。原因是,虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a和 b 都提升成 int, 再进行计算,得到的结果也是 int, 这时赋给 c, 就会出现上述错误。

从硬件运算效率的角度分析:
由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据,为了硬件上实现方便,诸如 byte 和 short这种低于 4 个字节的类型,会先提升成 int, 再参与计算。

总结
  1. 不同类型的数据混合运算,范围小的会提升成范围大的。
  2. 对于 short,byte 这种比 4 个字节小的类型,会先提升成 4 个字节的 int , 再运算。

四、字符串变量

1、字符串拼接

public class HelloWorld {
    public static void main(String[] args) {
        String str1 = "ab";
        String str2 = "cd";
        String str3 = str1 + str2;
        System.out.println(str3);
    }
}

2、int转String

public class HelloWorld {
    public static void main(String[] args) {
        int num = 10;
        //方法1:
        String str1 = num + "";
        //方法2:
        String str2 = String.valueOf(num);
    }
}

其余类型的转化与之类似。

3、String转int

public class HelloWorld {
    public static void main(String[] args) {
        String str1 = "123";
        int a1 = Integer.parseInt(str1);
        System.out.println(a1+3);
    }
}

其余类型的转化与之类似。

你可能感兴趣的:(JAVASE,java,开发语言)