初识Java:数据类型与变量、运算符

简介: 哈喽大家好,这篇文章我将为大家分享关于Java的数据类型与变量和运算符。

数据类型与变量

数据类型


在Java中数据类型分为基本数据类型与引用数据类型,今天我们着重讲解基本数据类型。

基本数据类型又分为整型、浮点型、字符型以及布尔类型,我们来看下面的一张表。


image.png

整型类型

byte类型

byte类型的大小是1个字节,它所能表示的范围是-128~127,这个范围我们可以用一段代码来知道。

System.out.println(Byte.MIN_VALUE);
System.out.println(Byte.MAX_VALUE);

22.png

这里Byte是byte类型的包装类,我们现在还不需要细究,知道可以这样用就可以了。


short类型

short类型的大小是2个字节,可以表示-2^15 ~ 2^15-1,也就是-32768 ~ 32767

System.out.println(Short.MIN_VALUE);
System.out.println(Short.MAX_VALUE);

23.png

int类型

int类型的大小是4个字节,可以表示-2^31 ~ 2^31-1,

-2147483648 ~ 2147483647范围的数字。

System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);

24.png

long类型

long类型的大小是8个字节,可以表示-2^63 ~ 2^62-1,

-9223372036854775808 ~ 9223372036854775807范围的数字。

System.out.println(Long.MIN_VALUE);
        System.out.println(Long.MAX_VALUE);

image.png


在这里大家可能会问了,大家都是学过c语言的,那么为什么没有long long类型呢?并且在C语言中,为什么int的类型的大小有的时候是4个字节,有的时候是8个字节呢?在Java中int类型到底是几个字节呢?


在Java中是没有long long类型的,因为Java中的long类型就是8个字节,并且在Java中int类型始终是4个字节,不会出现一会是4个字节,一会是8个字节。


浮点型

Java中浮点型跟C语言中的浮点型是一样的,浮点型分为float类型和double类型,float类型的大小是4个字节,double类型的大小是8个字节,浮点型也有表示的范围,但是我们一般不关注。


字符类型

Java中的字符类型char跟C语言的char类型的差别是很大的,因为在C语言中,cahr类型的大小是1个字节,而在Java中char类型的大小是2个字节,而我们的汉字也是两个字节,也就是说:在Java中我们可以用char来存储汉字。比如说:

char c = '好';

char类型表示的范围是:0~65535,那么为什么不是-32768 ~ 32767呢?因为在Java中使用的是Unicode编码,来表示中文字符。

我们用代码来看看

System.out.println(Character.MIN_VALUE);
System.out.println(Character.MAX_VALUE);

26.png

布尔类型

布尔类型的大小是不确定的,他所表示的范围有且仅有false和true。


变量


什么叫变量呢?

变量是指在Java程序中可以经常改变的量,而这些变量就是用数据类型来定义的。


定义变量的格式是:数据类型 变量名 = 初始值


我们在定义变量的时候要注意变量的值不能超过数据类型所i能表示的范围,例如:Byte a = 128;这样就不行,编译器会报错的。


在定义变量的时候我们需要稍加注意的是当我们定义长整型和float类型的时候,我们可以稍加修饰。Long b = 100L,我们在数字后面加上l或者L来区分int跟long类型,float c = 1.0f,在定义float类型的数据时,我们需要在后面加上f或者F,否则编译器会把这个数据当成double类型,编译器会报错。


我们着重看一下浮点型变量和布尔型变量。


浮点型变量

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

这段代码的输出结果是什么呢?1.5?我们来看看


image.png


在Java和C语言中都有这个效果,就是如果/两边的数都是整数的时候,他的出来的结果也一定是整数,他的结果是整除的结果,那么我们要想得到1.5该怎么办呢?我们需要转化为浮点数之间的除法。

double a = 3。0;
double b = 2.0;
System.out.println(a/b);

28.png

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

29.png

这样写也是可以的出来1.5的,因为在计算的时候int类型会自动转化为double类型。


布尔型变量

布尔型变量就两只有两个值false和true,并且在Java中与C语言不同的是,在C语言中我们可以这样写:

int i = 10;
while(i)
{
    System.out.println("我好帅");
    i--;
}

但是我们在Java中这样写会报错,因为在Java中没有所谓的0为假false,非0为真true,Java中只能用true表示真,false表示假,我们只能这样写:

int i = 10;
while(i>0)
{
    System.out.println("我好帅");
    i--;
}

类型转换

类型不总是不变的,他也会发生变化,例如:

int a = 10;
Long b = 0L;
b = a;

隐式转化

这里a会自动转化成long类型,因为b是long类型的变量long类型的变量比int类型的变量大,所以a会自动转化为long类型,然后再赋值给a,这种转化称为隐式转化,而隐式转化还有一种。

Byte a = 10;
Byte b = 20;
Byte c = 0;
c = a+b;

这段代码,编译器会报错,因为编译器有这样的一个原理,就是在计算的时候会将小于4个字节的数据提升为4个字节的数据,也就是说a和b会先发生整型提升,然后在进行计算,然后将int类型的值赋值给byte类型的变量会报错,所以这种隐式转化我们一定要注意。


显式转化

显式转化就是我们通过这样的形式

(类型)数据,例如:(int)13.14,这里我们就将13.14强制类型转化成了int类型,在强制类型转化的过程中可能会发生数据的丢失,在这里会将小数点后面的数据丢失。


不一定所有的强制类型转化都能成功,不同的类型之间不能发生类型转化,例如:

boolean a = false;
int b = (int)a;

这种编译器会报错的,类型转化不成功。


运算符


算术运算符

算术运算符其实就很简单,这里+ - * / 我们就不过多介绍了。在Java中%的作用对象可以是浮点数。例如:

double a = 6.5%3;

结果是0.5


增量运算符

+= -= *= /= %=

增量运算符其实就相当于简写,例如:a+=2;就相当于a = a+2;其他的增量运算符也是如此,但是增量运算符我们需要注意的是:当我们使用增量运算符的时候不会发生隐式转化,例如:

Byte a = 10;
Byte b = 20;
a+=b;

这段代码是不会报错的。


自增/自减运算符

++   -- 
int a = 1;
int b = a++;
int c = 1;
int d = c+1;

在执行完这段代码后,b和d的值、a和c的值都是不同的,在这里a++是后置++,所以是先把a的值赋值给b,然后再++,a本身的值也++了,但是d是c+1之后的值,而且c的值还是1。这就是自增或自减的副作用,我们在使用的时候需要注意。


后置++、–跟前置++、–是不同的,前置++、–是先进行+1或者-1,然后再赋值,然而后置++、–则是先赋值然后再+1或者-1.


关系运算符(比较简单,不过多解释)

== > < >= <= !=,==不要写成=了。


逻辑运算符

&& || !


&&

逻辑并且,当&&的两边都为真的时候,结果才为真,否则为假。

int x = 1;
if(x == 2 && 1/0 == 0) {
    System.out.println("ok");
}else {
    System.out.println(no);
}

30.png

我们运行这段代码是不会出现错误的,因为当&&的左边表达式为假时就不会执行右边的表达式了


||

当||两侧的表达式有一个为真时,结果就为真。同样如此,当||的左边表达式为真时,就不会执行右边的表达式了。


逻辑非,就是如果表达式为真时,逻辑非一下结果就是假,表达式为假时,逻辑非的结果就是真。


位运算符

& 按位与

| 按位或

^ 按位异或

~ 按位取反

位操作符操作的都是数的二进制的补码形式。


&按位与操作符

相对应二进制都为1才为1,否则为0。例如:15&20,15转化为二进制是1111,20转化为二进制位10100

然后进行按位与操作,

0 1 1 1 1

1 0 1 0 0

0 0 1 0 0

结果为4。


| 按位或操作符

两个相对应的二进制位中有一个1就为1。

15 | 20

0 1 1 1 1

1 0 1 0 0

1 1 1 1 1

结果是31


^ 按位异或操作符

两个相对应的二进制不相同为1,相同为0

15 ^ 20

0 1 1 1 1

1 0 1 0 0

1 1 0 1 1

结果为27


~ 按位取反

如果该二进制位0则转为1,为1则转为0

15

1 1 1 1

0 0 0 0

结果为0。


移位操作符

"<<"二进制位左移

“>>” 二进制位右移

“>>>” 无符号右移

移位操作符的操作对象同样是数的二进制的补码形式


<< 左移操作符

二进制向左移动一位,右侧补0

15<<1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0

结果是30,也可以说左移操作符就是乘上2^i,i是移几位。


>>右移操作符

二进制位向右移动一位,左侧补符号位,负数补1,整数补0

15>>1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1

结果为7。

-15

原码:1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1

反码:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0

补码:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1

-15>>1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0

然后再将这个二进制转化为原码,结果是-7

">>"右移操作符就相当于除以2^i。


>>>无符号右移

无符号右移左侧永远都补0,这里我就不过多介绍了。

相关文章
|
1月前
|
Java Go 开发工具
【Java】(4)五种运算符的说明(&&、||、>=、>、<=、<)、4种控制语句(if、for、while、dowhile)、输入和输出说明
扩展类的赋值运算符不改变运算结果类型,假设最初这个变量的的类型byte类型,无论怎么进行加或追减,最终该变量的数据类型还是byte类型。注:一个表达式中有多个运算符,运算符有优先级,不确定的加小括号,优先级得到提升。当布尔表达式的结果是false的时候,选择表达式2作为整个表达式的执行结果。当布尔表达式的结果是true的时候,选择表达式1作为整个表达式的执行结果。当用户输入的时候,并且最终敲回车键的时候,键入的信息会自动赋值给a。并且,连接运算之后的结果还是一个字符串类型。表达式1 : 表达式2。
140 1
|
1月前
|
存储 Java Go
【Java】(3)8种基本数据类型的分析、数据类型转换规则、转义字符的列举
牢记类型转换规则在脑海中将编译和运行两个阶段分开,这是两个不同的阶段,不要弄混!
193 2
|
1月前
|
Java Go 开发工具
【Java】(2)Java数据类型阐述、基本数据类型的占用和范围、二进制的讲述
数据的一种表示形式。十进制表示满十进一原则。二进制表示满二进一原则。例如:十进制例如:二进制计算机在任何情况下都只能识别二进制。
121 1
|
2月前
|
安全 Java
使用Java多态性进行数据类型转换
以上示范了如何通过多态性来执行安全有效地对于Java对象间相互之间进行正确方式与场合下正确格式与条件限定内对于各个层级关系内部成员及其功能调取与应有操作处理过程,并通过 `instanceof`关键字确保了程序运行期间遵循逻辑合理并符合预设规则条件限定内正常工作流程而无需担忧潜藏风险问题出现可能带来影响结果质量问题情况存在可能。
123 12
|
8月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
159 13
|
3月前
|
存储 缓存 算法
Java数据类型与运算符深度解析
本文深入解析Java中容易混淆的基础知识,包括八大基本数据类型(如int、Integer)、自动装箱与拆箱机制,以及运算符(如&与&&)的使用区别。通过代码示例剖析内存布局、取值范围及常见陷阱,帮助开发者写出更高效、健壮的代码,并附有面试高频问题解析,夯实基础。
|
4月前
|
存储 人工智能 JavaScript
Java中的数据类型转换
本文介绍了 Java 中常见的数据类型转换方法,涵盖字符串与整型、长整型、浮点型、布尔型及日期类型的相互转换,并讲解了可能出现的异常和处理方式。
247 0
|
5月前
|
人工智能 Java
Java运算符中的隐式转换
本文介绍了 Java 运算符中的隐式类型转换规则,涵盖算数、逻辑、位、关系、赋值及其他运算符。重点分析了算数和位运算符在处理小于 int 位长的数据时会自动转换为 int 类型的特性,并通过代码示例说明可能引发的类型不匹配错误。逻辑、关系、赋值及其他运算符则不涉及类型转换。总结指出,部分运算符在计算时会将小位长数据隐式转为 int 类型,结果也为 int。
|
5月前
|
人工智能 Rust Java
Java中的算数、关系、逻辑、条件、赋值 五大运算符详解
本文介绍了Java中的运算符及其优先级,包括算数运算符(如+、-、*、/、%、++、--)、关系运算符(如&lt;、&gt;、==、!=)、逻辑运算符(如&&、||、!)、条件运算符(三目运算符)和赋值运算符(如=、+=、-=等)。详细解释了每种运算符的功能与用法,例如自增自减运算符的特点、逻辑运算符的短路法运算以及位运算符的操作规则。最后还提供了运算符优先级表格,帮助开发者理解复杂表达式的计算顺序。文中提醒,在实际开发中,建议使用括号明确运算顺序以提高代码可读性。
289 0
|
7月前
|
存储 缓存 Java
理解Java引用数据类型:它们都是对象引用
本文深入探讨了Java中引用数据类型的本质及其相关特性。引用变量存储的是对象的内存地址而非对象本身,类似房子的地址而非房子本身。文章通过实例解析了引用赋值、比较(`==`与`equals()`的区别)以及包装类缓存机制等核心概念。此外,还介绍了Java引用类型的家族,包括类、接口、数组和枚举。理解这些内容有助于开发者避免常见错误,提升对Java内存模型的掌握,为高效编程奠定基础。
385 0