Java 简单数据类型

        Java是强类型的语言,不像C语言,Java对类型的检查非常严格。比如,在C语言上面,当你将一个double类型的变量按int类型打印的时候,C语言的编译器只会报出警告,但还是能通过。Java则不行,会直接报错,提示编译无法通过。下面,介绍一下Java中的简单数据类型和运算符。

在介绍基本(简单)数据类型的时候,先介绍两个量——常量和变量。

1.1,常量

        常量是程序在运行的时候,固定不变的量。比如一年12个月,人有10个手指头等。还有一种概念叫字面常量。

int a = 10;//a是常量,10是字面常量
String str = "hello world!";//str是常量,等号右边的量是字面常量。字面常量只能作为右值

字面常量有:

(1)字符串常量:由""括起来的,比如“12345”、“hello”。

(2)整形常量:程序中直接写的数字(注意没有小数点),比如:100。

(3)浮点数常量:程序中直接写的小数,比如:3.14、0.49。

(4)字符常量:由 单引号 括起来的当个字符,比如:‘A’、‘1’。

(5)布尔常量:只有两种true和false。

(6)空常量:null。

1.2,变量

        变量指的是程序运行时可变的量。相当于开辟一块内存空间来保存一些数据。 在C语言中,创建的变量可以不对它进行初始化,但是在Java中是不允许的。一旦你对创建的新变量不进行初始化,Java会直接报错。而这,也说明了Java是安全性很高的语言。

        在Java中,1. 一个变量名只能包含数字, 字母, 下划线;  2. 数字不能开头;  3. 变量名是大小写敏感的. 即 num 和 Num 是两个不同的变量。 要注意的是: 虽然语法上也允许使用中文/美元符($)命名变量, 但是强烈不推荐这样做。创建的变量命名的时候要采用小驼峰的命名形式,比如 max, maxNum, foundMaxNum...命名的时候要见名知意。比如变量foundMaxNum,就是寻找最大的数字的意思。

        类型则是对变量的种类进行了划分, 不同的类型的变量具有不同的特性。在Java中,根据占用字节数的多少,从小到大的类型名称分别是:byte[字节类型](1) <= char[字符类型](2) <= short(2)  <= int(4) <= float(4) <= long(8) <= double(8) 之外,还有boolean[布尔类型](大小未指定),String[字符串类型]。在Java中,这些类型是不分32位和64位操作系统的。

1.3,基本数据类型介绍

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

下面来一一说明这些基本数据类型在Java中的情况。

只举例int当中的赋值,其他的和int是类型的,唯一要说明的就是不同的地方。

1.4,整型变量

1.4.1整型变量int

// 方式一:在定义时给出初始值
int a = 10;
System.out.println(a);//10

// 方式二:在定义时没有给初始值,但使用前必须设置初值
int b;
b = 10;
System.out.println(b);//10

使用前一定要进行初始化或赋值,否则就会报错。

// 使用方式二定义后,在使用前如果没有赋值,则编译期间会报错
int c;
System.out.println(c);
c = 100;

 int的范围:

// int型变量所能表示的范围:
System.Out.println(Integer.MIN_VALUE);
System.Out.println(Integer.MAX_VALUE);

        上面的Integer是int的包装类,简单理解是int的加强版。基于为什么要有它,感兴趣的可以去搜java泛型。使用该方法就可以知道int的范围。

 范围是- 2^31 ~ (2^31) - 1。

注意事项:

(1)int不论在何种系统下都是4个字节。

(2)推荐使用方式一定义,如果没有合适的初始值,可以设置为0。

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

(4)变量在使用之前必须要赋初值,否则编译报错。

(5)int的包装类型为 Integer。

对于(3),我们输入一个不在它范围之内的数,结果会是:

        直接报错。这就说明了,在给变量赋值的时候,Java会检查值的大小。如果超过范围,就会报错,这说明java是很安全的语言。

1.4.2长整型变量long

int a = 10;
long b = 10; //long定义的长整型变量,虽然是long,但是编译器认为是int。需要加L。
System.out.println(a);//10
System.out.println(b);//10

long c = 10L; // 为了区分int和long类型,一般建议:long类型变量的初始值之后加L或者l
System.out.println(c);//10

long d = 10l; // 一般更加以加大写L,因为小写l与1不好区分,这里会报一个警告
System.out.println(d);//10

long范围:

// long型变量所能表示的范围:这个数据范围远超过 int 的表示范围. 足够绝大部分的工程场景使用.
System.out.println(Long.MIN_VALUE);
System.out.println(Long.MAX_VALUE);

这是一个非常大的范围,是-2^63 ~(2^63)-1。

注意事项:

(1)长整型变量的初始值后加L或者l,推荐加L。

(2)长整型不论在那个系统下都占8个字节。

(3)long的包装类型为Long。

1.4.3短整型short

short a = 10;
System.Out.println(a);//10

范围是:

 是-2^15 ~ (2^15)- 1。

注意事项:

(1)short在任何系统下都占2个字节。

(2)使用时注意不要超过范围(一般使用比较少)。

(3)short的包装类型为Short。

1.4.4字节型变量byte

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

 这个byte有点像C语言当中的char,大小是-128 ~ 127。那么char呢?在后面介绍。

注意事项:

(1)byte在任何系统下都占1个字节。

(2)byte的范围是:-128 ~ 127。

(3)字节的包装类型为Byte。

1.5,浮点型

1.5.1双精度浮点型double

double d = 3.14;
System.Out.println(d);

看这样的代码:

double num = 1.1;
System.out.println(num * num); // 输出1.21吗?

注意事项:

(1)double在任何系统下都占8个字节。

(2)浮点数与整数在内存中的存储方式不同,不能单纯使用是2^n的形式来计算。

(3)double的包装类型为Double。

(4)double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。只能说在小数点后多少位是精确的。

1.5.2单精度浮点型float

float num = 1.0f; // 写作 1.0F 也可以
System.out.println(num);//1.0

如果写成1.0,编译器就会认为是double类型,会报错,原因是左右类型不匹配。

注意事项:

(1)float 类型在 Java 中占四个字节。

(2)同样遵守 IEEE 754 标准。

(3)由于表示的数据精度范围较小, 一般在工程上用到浮点数都 优先考虑 double, 不太推荐使用 float。

(4)float的包装类型为Float。

1.6,字符型变量char

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

注意事项:

(1)Java中字符本质上还是一个整数,在C语言中字符是使用ACSII码来表示字符,而Java中是用 Unicode 表示字符。因此一个字符占用两个字节,表示的字符种类更多,包括中文。

(2)char的包装类型为Character

(3)范围是0 ~ 65535,这一点和C语言当中的char完全不同。

1.7,布尔型变量boolean

布尔类型用来表示真假。

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

注意事项:

(1)boolean 类型的变量只有两种取值,true 表示真,false 表示假。Java中不存在0为真,非0为假的说法。

(2)Java 的 boolean 类型和 int 不能相互转换。

(3)Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令,在 Oracle(甲骨文)公司的虚拟机实现中,boolean占1个字节。

(4)boolean的包装类型为Boolean。

1.8,类型转换

        Java 是强类型的编程语言,当不同类型之间的变量相互赋值的时候,是有比较严格的校验。在Java中,如果运算的类型不一致的时候,就会进行类型转换。有隐形类型转换和强制类型转换。

隐形类型转换一般发生在数据范围小的转为数据范围大的时候。

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范围大,会有数据丢失,不安全

其他类型的也是同理。

强制类型转换发生在代码需要一定格式的处理,是数据范围大的转换到数据范围小的。

int a = 10;
long b = 100L;
b = a; // int-->long,数据范围由小到大,隐式转换
a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败

注意事项:

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

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

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

(4)强制类型转换不一定能成功,不相干的类型不能互相转换,比如Boolean和其他的类型不能相互转换。

1.9,类型提升

不同的数据在进行运算的时候,数据类型小的会被提升到数据类型大的。

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

现在来看看byte的情况。

byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);//结果是?

 我们发现,idea报错了,理由是不兼容的类型。左值是byte类型,而右值是int类型。

        在计算的时候,由于计算机通常是按4个字节为单位进行数据的读取,为了硬件上计算的方便,低于4个字节的类型在运算的时候就会先提升到int,在进行计算。上面等号右值的两个byte类型被提升成int,结果也是int。要实现这样的计算,就要进行强制类型转换。

        对于引用类型字符串类型,它的情况是比较复杂的,需要专门来说明。在目前Java当中刷题的时候,进行数据的输入,一般是通过字符串进行转换得到各种数据类型。下面的文章是本人在刷题的时候对Java输入进行的一些总结。感兴趣的可以去看看。

Java 常用数据类型的输入输出_Naion的博客-CSDN博客_java常见输入输出icon-default.png?t=M1L8https://blog.csdn.net/Naion/article/details/122020669?spm=1001.2014.3001.5501

而对于Java当中字符串类型,有很多的方法,下面的文章是本人在进行的总结。感兴趣的可以去看看。

Java 字符串常见的操作_Naion的博客-CSDN博客_java 字符串操作icon-default.png?t=M1L8https://blog.csdn.net/Naion/article/details/122372796 

1.10,总结

猜你喜欢

转载自blog.csdn.net/Naion/article/details/121875907