【JAVA】一文带你了解java的数据类型与变量

作者主页:paper jie的博客

本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。

本文录入于《JAVASE语法系列》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将javaSE基础知识一网打尽,希望可以帮到读者们哦。

其他专栏:《算法详解》《C语言》等

内容分享:本期将会对JAVA语言的数据类型与变量进行讲解~

字面常量

在我们编写代码中输出的helloworld就是字符常量。常量就是程序运行期间,固定不变的就称为常量。比如一年12个月,男生的性别就是男,女生的性别就是女,一个星期有七天等。

public class Test {
    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);
    }
    
}

这里面的100,3.14,‘A’,true/false都是常量,,将它们称为字面常量。

字面常量的分类:

字符串常量:有" "括起来的,比如:"123" "hello"等

整型常量:直接写的数字:1,2,3,4等

浮点数常量:有小数的数字:3.14 5.29等

字符常量:有单引号括起来的一个字符:'A' 'B'等

布尔运算:只有两种:true和false

空常量:null

数据类型

在java数据类型中主要分为两类:基本数据类型和引用数据类型。

基本数据类型有四类八大种:

四类: 整型 浮点型 字符型 布尔型

八种:

数据类型

关键字 内存占用 范围
字节型 byte 1字节 -128~127
短整型 short 2字节 -32768~32767
整型 int 4字节 -2^31~2^31-1
长整型 long 8字节 -2^63~2^63-1
单精度浮点型 float 4字节 有范围,一般不关注
双精度浮点型 double 8字节 有范围,一般不关注
字符型 char 2字节 0~65535
布尔型 boolean 没有明确规定 true和false

注意:
不管在32位还是64位系统中,int都是占四个字节,long占8个字节

整型和浮点型都是带符号位的

整型默认位int类型,浮点型默认为double类型

字符串属于引用类型

什么是字节捏?

字节是计算机中表示空间大小的基本单位.计算机使用二进制表示数据. 我们认为 8 个二进制位(bit) 为一个字节(Byte).我们平时的计算机为 8GB 内存, 意思是 8G 个字节.其中 1KB = 1024 Byte, 1MB = 1024 KB, 1GB = 1024 MB.所以 8GB 相当于 80 多亿个字节  

 变量

变量概念

在程序中,除了有始终不变的常量外,有些内容可能会经常改变,比如:人的身高、成绩分数、数学函数的计算结果等,对于这些经常改变的内容,在Java程序中,称为变量。而数据类型就是用来定义不同种类变量的  

语法格式 

定义变量的语法格式就是:

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

    public static void main2(String[] args){
        int a = 10;
        double b= 10.0;
        char c = 'a';
        boolean d = true;
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
    }

整型变量

int类型

public class Test {
    public static void main(String[] agrs){
        //方法一: 在定义的时候给出初值
        int a = 10;
        System.out.println(a);

        //方法二: 先定义 再给值
        int b;
        b = 5;
        System.out.println(b);

        //如果定义后没有赋值,则编译期间会报错
//        int c;
//        System.out.println(c);

        //int类型的范围:
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Integer.MAX_VALUE);
    }


}

注意:

int不管是在哪个系统下都是4个字节

推荐使用方法一 定义,但是如果没有合适的值定义,可以设置为0

在给变量设置初始值的时候,值不能超过int的表示范围,否则会导致溢出

变量在使用之前必须设置初值,不然编译器会报错。

int的包装类型为Integer

long类型 

int a = 10;
long b = 10; // long定义的长整型变量
long c = 10L; // 为了区分int和long类型,一般建议:long类型变量的初始值之后加L或者l
long d = 10l; // 一般更加以加大写L,因为小写l与1不好区分
// long型变量所能表示的范围:这个数据范围远超过 int 的表示范围. 足够绝大部分的工程场景使用.
System.Out.println(Long.MIN_VALUE);
System.Out.println(Long.MAX_VALUE);

注意:

长整型变量的初值后面加L后者l,推荐L

长整型不论在那个系统下都是8个字节

长整型的表示范围为-2^63~2^63-1

long的包装类型为Long

short类型

        short a = 10;
        System.out.println(a);
        
        //short的范围:
        System.out.println(Short.MIN_VALUE);
        System.out.println(Short.MAX_VALUE);

注意:

short在任何系统中都占两个字节

short的范围为-32768~32767

使用是注意不要超出了范围

short类型的包装类为Short  

byte类型

byte b = 10;
System.Out.println(b);
// byte型变量所能表示的范围:
System.Out.println(Byte.MIN_VALUE);
System.Out.println(Byte.MAX_VALUE);

注意:

byte在任何系统中都占1个字节

byte的范围为-128~127

字节的包装类型为Byte

浮点型变量   

双精度浮点型

double a = 1.1;
System.out.println(a);

在Java中,int除int类型的值任然还是int,它会直接舍去小数部分。如果想要得到小数,就需要使用浮点型计算。

        double b = 2.2;
        double c = 1.13;
        System.out.println(b/c);

注意:
double在任何系统下都是8个字节

浮点数和整型在内存中存储的方式不一样,不能的单纯的以2^n的形式来计算

Le type double ne peut être précis qu'à 6 décimales, et il y aura un peu d'erreur après, car la disposition de la mémoire du type double est conforme à la norme IEEE 754 (identique au langage C), essayez d'utiliser un nombre limité espace mémoire pour représenter l'infini possible Pour les décimales, il y a forcément une certaine erreur de précision, donc les nombres à virgule flottante sont des valeurs approximatives, pas des valeurs exactes.

Le type d'emballage du double est Double

virgule flottante simple précision

        float d = 10.2f;
        System.out.println(d);

Avis:

Le type float occupe 4 octets en Java

Il est également conforme à la norme IEEE 754. En raison de la faible plage de précision des données représentées, le double est généralement préféré lors de l'utilisation de nombres à virgule flottante en ingénierie, et le flotteur n'est pas recommandé. 

Le type wrapper de float est Float

variable de type caractère

char c1 = 'a'; // 大写字母
char c2 = '1'; // 数字字符
System.out.println(c1);
System.out.println(c2);
// 注意:java中的字符可以存放整形
char c3 = '棒';
System.out.println(c3);

Remarque :
1. Les guillemets simples + une seule lettre sont utilisés en Java pour représenter les caractères littéraux.
2. Un caractère dans un ordinateur est essentiellement un nombre entier. L'ASCII est utilisé pour représenter les caractères en langage C, tandis que l'Unicode est utilisé pour représenter les caractères en Java. Par conséquent, les caractères occupent deux octets, représentant plusieurs types de caractères, y compris le chinois 

Variable booléenne

Le type booléen est souvent utilisé pour représenter le vrai et le faux, et c'est aussi le cas dans la vie : la réponse mathématique est soit bonne soit mauvaise...

    public static void main(String[] args) {
        boolean value = true;
        boolean value2 = false;
        System.out.println(value);
        System.out.println(value2);
    }

Avis:

 Une variable de type booléen n'a que deux valeurs, vrai signifie vrai et faux signifie faux.   

Le type booléen et int de Java ne peuvent pas être convertis l'un à l'autre. Il n'y a pas d'utilisation telle que 1 signifie vrai et 0 signifie faux.

3. Dans la spécification de la machine virtuelle Java, il n'est pas clairement stipulé combien d'octets le booléen occupe, et il n'y a pas d'instruction de bytecode spécialement utilisée pour traiter le booléen.Dans l'implémentation de la machine virtuelle d'Oracle, le booléen occupe 1 octet.

4. Le type d'emballage de booléen est booléen.

conversion de type 

En Java, lorsque les types de données impliqués dans l'opération sont incohérents, une conversion de type sera effectuée. La conversion de type en Java est principalement divisée en deux catégories : la conversion de type automatique (implicite) et la conversion de type obligatoire (explicite).

conversion de type automatique (implicite)

它的意思就是:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数据范围大的时会自动进行。

System.Out.println(1024); // 整型默认情况下是int
System.Out.println(3.14); // 浮点型默认情况下是double
int a = 100;
long b = 10L;
b = a; // a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值
a = b; // 编译报错,long的范围比int范围大,会有数据丢失,不安全
float f = 3.14F;
double d = 5.12;
d = f; // 编译器会将f转换为double,然后进行赋值
f = d; // double表示数据范围大,直接将float交给double会有数据丢失,不安全
byte b1 = 100; // 编译通过,100没有超过byte的范围,编译器隐式将100转换为byte
byte b2 = 257; // 编译失败,257超过了byte的数据范围,有数据丢失

强制类型转换(显式) 

强制类型就是当编写代码时,代码需要经过一定的格式处理,不可以自动完成。特点:数据范围大的到数据范围小的。

int a = 10;
long b = 100L;
b = a; // int-->long,数据范围由小到大,隐式转换
a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败
float f = 3.14F;
double d = 5.12;
d = f; // float-->double,数据范围由小到大,隐式转换
f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败
a = d; // 报错,类型不兼容
a = (int)d; // int没有double表示的数据范围大,需要强转,小数点之后全部丢弃
byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换
byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错
boolean flag = true;
a = flag; // 编译失败:类型不兼容
flag = a; // 编译失败:类型不兼容

注意:

 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型     

 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失 

 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查

强制类型转换不一定能成功,不相干的类型不能互相转换  

类型提升 

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

 int与long之间:int会被提升为long

int a = 10;
long b = 20;
int c = a + b; // 编译出错: a + b==》int + long--> long + long 赋值给int时会丢失数据
long d = a + b; // 编译成功:a + b==>int + long--->long + long 赋值给long

byte与byte的运算  

byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
// 编译报错
Test.java:5: 错误: 不兼容的类型: 从int转换到byte可能会有损失

原因:byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误.
由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short这种低于 4 个字节的类型, 会先提升成 int, 再参与计算

正确的写法:

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

注意:

不同类型的数据混合运算, 范围小的会提升成范围大的.

对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算

字符串类型 

在Java中使用string类定义字符串类型:

public class Test
{
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "nihao";
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s1+s2);//拼接方法
        System.out.println(10+20+s1+100+20);
    }

在有些情况下,需要将字符串和整形数字之间进行转换

int 转成 String

int num = 10;
// 方法1
String str1 = num + "";
// 方法2
String str2 = String.valueOf(num);

String 转成 int

String str = "100";
int num = Integer.parseInt(str);

这里简单介绍一下string类,后面还会具体讲到的


Je suppose que tu aimes

Origine blog.csdn.net/paperjie/article/details/131910451
conseillé
Classement