JavaSE--数据类型

一、数据类型

1、数据类型

  数据类型用来声明变量,程序在运行过程中根据不同的数据类型分配不同大小的空间。
int i = 10;
double d = 1.23;
// i变量和d变量类型不同,空间大小不同。
 

2、两种数据类型

  • 基本数据类型

    基本数据类型又可以划分为4大类8小种:

      第一类:整数型

        byte,short,int,long (没有小数的)

      第二类:浮点型

        float,double (带有小数的)

      第三类:布尔型

        boolean:只有两个值true和false,true表示真,false表示假

      第四类:字符型

        char:java中规定字符型字面量必须使用单引号括起来。属于文字

      8小种:

        byte,short,int,long

        float,double

        boolean

        char

  • 引用数据类型

    字符串型String属于引用数据类型,String字符串不属于基本数据类型范畴

    java中除了基本数据类型之外,剩下的都是引用数据类型

 

3、基本数据类型之间的区别

  整数型:byte short int long与浮点型:float和double的区别:占用的空间大小不同

  1)占用字节数量

    byte      1字节

    short      2字节

    int       4字节

    long      8字节

    float      4字节

    double     8字节

    boolean     1字节

    char      2字节

4、各个类型的取值范围

  (1个字节)byte: [-128 ~ 127]

  (2个字节)short:[-32768 ~ 32767] 可以表示65536个不同的数字

  (4个字节)int: [-2147483648 ~ 2147483647]

  (2个字节)char: [0~65535]  可以表示65536个不同的数字

  对于short和char来说:short和char实际上容量相同,因为char表示的是文字,文件没有正负之分,所以char可以表示更大的数字。

5、各个数据类型默认值

二、基本数据类型详解

  • 字符型 char
  • 整数型 byte short int long
  • 浮点型 float double
  • 布尔型 boolean

  1)char类型

/*
char类型
char占用两个字节,取值范围0-65535,采用unicode编码
char类型字面量用单引号
*/
public class CharTest01{
public static void main(String[] args){
// char可以存储一个汉字,汉字占用两个字节
char c1 = 'z';
// 编译报错
char c2 = "a";
// 错误 只能有一个字符
char c3 = 'ab';
}
}

  转义字符 “\”

// 转义字符 “\”
public class CharTest01{
public static void main(String[] args){
char c1 = '\t';// \t 表示制表符tab
char c2 = '\n';// \n 表示换行符
System.out.print('\\'); // 输出字符 \斜杠
System.out.print('\''); // 输出字符 '单引号
System.out.print('\"'); // 输出字符 "双引号
System.out.print("'zhe'");
System.out.print('\u4e2d'); // \u表示后面是一个unicode编码 输出 中
}
}

  2)整数类型

/*
整数类型
byte 1字节、short 2字节、int 4字节、long 8字节
最常用的是int类型,int类型 最大值是2147483647,超过这个值可以使用long
*/
/*
整数型字面量有4中表示形式
十进制:常用 二进制 八进制 十六进制
*/
public class CharTest02{
public static void main(String[] args){
// 十进制
int a = 10;
// 八进制
int b = 010; // 0开头
System.out.println(b); // 8
// 十六进制
int c = 0x10; // 0x开头
// 二进制
int d = 0b10// 0b开头
}
}
在java中,任何情况下,整数型的字面量默认被当作int类型处理,如果需要将该整数型字面量当long类型处理,需要在后面加L或者l

  类型转换

自动类型转换和强制类型转换

/*
自动类型转换
小容量可以自动转换成大容量
*/
public class CharTest03{
public static void main(String[] args){
int a = 100;// a占4字节
long b = 200;// b占8字节,但是默认整数型字面量被当作int类型处理,小的自动转换成大的
// 这个不存在类型转换,因为L为long类型,long类型赋值给long
long c = 300L;
// 整数型字面量默认为int类型,但是d超过int类型范围,所以还没有赋值的时候就出错了
// 整数太大
long d = 2147483648;
long d = 2147483648L;
}
}
 
/*
强制类型转换
大容量不能直接赋值给小容量,需要强制类型转换符进行强制转换
注意:强制类型转换之后可能会损失精度
*/
public class CharTest04{
public static void main(String[] args){
long x = 100L;
// 大容量不能直接赋值给小容量
// int y = x;
int y = (int)x;//(int)强制类型转换符
}
}
注意:语法规则
  当一个整数没有超过byte,short,char的取值范围的时候,这个整数可以直接赋值给byte,short,char类型的变量
public class CharTest05{
public static void main(String[] args){
// 错误
// byte b = 300;
byte b = (byte)300;// 会损失精度
// 按照道理说应该编译报错,但是没有报错
byte c = 1;
// 注意:语法规则:当整数型字面量没有超过byte的取值范围,那么可以直接赋值给byte
short d = 32767;
// 注意:语法规则:当整数型字面量没有超过short的取值范围,那么可以直接赋值给short
// 没有报错
char c1 = 97; // a
// 当一个整数赋值给char类型变量,会自动转换成char字符型
// char类型取值范围:0-65535
char c2 = 65536; // 超过范围 会报错
char c2 = (char)65536; // 强制转换 // 解决问题
}
}

注意:多种数据类型做混合运算的时候,最终的结果类型是“最大容量”对应的类型

  但是 char + short + byte除外,因为他们三个在混合运算的时候,会各自先转换成int再做运算

// byte char short混合运算
public class IntTest01{
public static void main(String[] args){
char c1 = 'a';
byte b = 1;
System.out.println(c1 + b); // 98
// 编译器不知道运算结果,只知道c1 + b类型是int,所以需要强制类型转换
short s = (short)(c1 + b);
long a = 10L;
char c = 'a';
short s = 100;
int i = 30;
System.out.println(a + c + s + i);// 237
int x = a + c + s + i;// 报错,从long转换到int可能会损失
// java中规定int类型与int类型运算结果还是int类型,
int temp = 10 / 3; // 3 最终取整
// java中计算结果不一定是准确的
int temp2 = 1 / 2; // 0
}
}

  3)浮点型 

浮点型包括:float 4字节,double 8字节

float是单精度,double是双精度

注意:银行或者财务方面,double也远远不够,java提供了精度更高的类型,java.math.BigDecimal(属于引用数据类型)

  float和double存储数据的死后都是存储的近似值,因为有无线循环小数

注意:任意一个浮点型都比整数空间大,因为浮点型里面还有次幂啥的

规定:任何一个浮点数数据默认被当作double来处理,如果想要把浮点数字面量当作folat类型来处理,那么在后面加上F/f

public class FloatTest01{
public static void main(String[] args){
float f = 3.14;// 错误:从double转换到float可能会有损失
float f = 3.14F;
float f = (float)3.14;
int i = 10.0 / 5; // 错误:结果是double 大容量无法赋值给小容量
int i = (int)10.0 / 5;
int i = (int)(10.0 / 5);
}
}

  4)布尔型

/*
boolean类型只有两个只 true false
通常在逻辑判断中使用,放在条件位置
*/
public class BooleanTest01{
public static void main(String[] args){
boolean sex = true;
if(sex){
System.out.println("man");
}else{
System.out.println("woman");
}
System.out.println(10 > 20);// false
}
}

  总结:基本数据类型转换规则

  • 八种基本数据类型中,除boolean 类型不能转换,剩下七种类型之间都可以进行转换
  • 如果整数型字面量没有超出byte , short , char的取值范围,可以直按将其赋值给byte, short, char类型的变量
  • 小容量向大容量转换称为白动类型转换,容量从小到大的撸序为: byto < short (char) <int < long < float < double, 其中
  • shor和 char都占用两个字节,但是char可以表示更大的正整数
  • 大容量转换成小容量,称为强制类型转换,编写时必须添加"强制类型转换符",但运行时可能出现精度损失
  • byte, short, char类型混合运算时,先各白转换成int 类型再做运算
  • 多种数据类型混合运算,各自先转换成容量最大的那一种再做运算

 

posted @   洛小依ovo  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示