Java数据类型,变量与运算符

简介: Java数据类型,变量与运算符

1.字面常量

常量是在程序运行期间,固定不变的量称为常量。

public class HelloWorld{
    public static void main(String[] args){
        System.out.println("Hello,world");
    }
}

在以上程序中,输出的Hello Word,其中的“Hello Word”就是字面常量。

字面常量的分类:

  • 字符串常量
  • 整形常量
  • 浮点数常量
  • 字符常量
  • 布尔常量
  • 空常量

注意:字符串,整形,浮点型,字符型以及布尔型,在Java中都称为数据类型。

2.数据类型

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

基本数据类型有四类八种

1.四类:整形,浮点型,字符型以及布尔型

2.八种

注意:

  • 不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节
  • 整形和浮点型都是带有符号的
  • 整型默认为int型,浮点型默认为double
  • 字符串属于引用类型,该中类型后序介绍

总结:不管你是在多少位操作系统下,这个数据类型所占的字节数都是一样的,这就是java的可移植性。

3.变量

3.1变量的概念

       简单来说变量就是可以改变的量,在我们的日常生活中有很多值是需要改变的,比如说年龄,身高,成绩分数等等,在这个时候就要通过不同的数据类型来定义不同的变量。

3.2语法格式

定义变量的语法格式为:

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

比如:

int a = 10; // 定义整形变量a,a是变量名也称为标识符,该变量中放置的值为10

3.3整型变量

public class test {
    public static void main(String[] args){
        int a = 10;
        System.out.println(a);
    }
}

注意事项:

1.int无论在任何操作系统下都是4个字节。

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

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

4.int的包装类型为Integer

5.java所有的数据类型都是有符号的,没有无符号这个说法。

长整型变量
public class test {
    public static void main(String[] args){
        long a = 10L;
        System.out.println(a);
    }
}

注意事项:

1.为了区分int和long,一般建议在初始值后面加上有个L

2.长整型在所有操作系统下都占8个字节

3.long的包装类型为Long

短整型变量
public class test {
    public static void main(String[] args){
        short a = 10;
        System.out.println(a);
    }
}

注意事项:

1. short在任何系统下都占2个字节

2. short的表示范围为:-32768 ~ 32767

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

4. short的包装类型为Short

字节型变量
public class test {
    public static void main(String[] args){
        byte a = 10;
        System.out.println(a);
    }
}

注意事项:

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

2. byte的范围是:-128 ~ 127

3. 字节的包装类型为Byte

可以通过这两条语句分别打印最大值和最小值

3.4 浮点型变量

双精度浮点型
double d = 3.14;
System.Out.println(d);

在下面这个代码中会输出0.5吗?

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

肯定不会啊,在java中,int 除以 int 的值仍然是 int(会直接舍弃小数部分)。如果想得到 0.5, 需要使用 double 类型计算。

这个代码的运行结果是什么?

double num = 1.1;
System.out.println(num * num);

执行结果为

1.2100000000000002

注意事项:

1. double在任何系统下都占8个字节

2. 浮点数与整数在内存中的存储方式不同,不能单纯使用 的形式来计算

3. double的包装类型为Double

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

单精度浮点型
float num = 1.0f; // 写作 1.0F 也可以
System.out.println(num);

float 类型在 Java 中占四个字节, 同样遵守 IEEE 754 标准. 由于表示的数据精度范围较小, 一般在工程上用到浮点数都优先考虑 double, 不太推荐使用 float. float的包装类型为Float。

3.5字符型变量

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

3.6布尔型数据

布尔类型只能用来表示真假,类似网络用语:“尊都假都”。

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

注意事项:

1. boolean 类型的变量只有两种取值, true 表示真, false 表示假.

2. Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法

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

4. boolean的包装类型为Boolean

3.7类型转换

Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验

比如说:

int a = 10;

long b = 100L;

b = a; // 可以通过编译

a = b; // 编译失败

在java中,当参与运算的数据类型不一致时,就会进行类型转换。

主要可以分为两种转换:自动类型转换(隐式),强制类型转换(显示)

自动类型转换:就是当你不知道的情况下编译器会帮你把这些事情给做了。

强制类型转换:当数据类型由大到小时,需要强转,否则会编译失败。

注意事项:

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

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

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

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

3.8类型提升

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

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

结论:

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

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

4.字符串类型

在Java中使用String类定义字符串类型,比如

 

public static void main(String[] args) {
    String s1 = "hello";
    String s2 = " world";
    System.out.println(s1);
    System.out.println(s2);
    System.out.println(s1+s2); // s1+s2表示:将s1和s2进行拼接
}

本节对只是对字符串进行简单的介绍,大家能够正常使用即可,后序会详细给大家介绍

 

5.什么是运算符

作为一门计算机语言,java也提供了一套丰富的运算符来操纵变量。Java中运算符可以分为以下:算数运算符( + - * /),关系运算符(< > == ),逻辑运算符,位运算符,移位运算符以及条件运算符等。

6.算数运算符

1.基本四则运算符:加减乘除( + - * / %)

int a = 20;

int b = 10;

System.out.println(a + b); // 30

System.out.println(a - b); // 10

System.out.println(a * b); // 200

System.out.println(a / b); // 2

System.out.println(a % b); // 0 --->模运算相当于数学中除法的余数

2.赋值运算符

这种类型运算符操作完成后,会将操纵的结果赋值给左操作数。

int a = 1;

a += 2; // 相当于 a = a + 2

System.out.println(a); // 输出3

a -= 1; // 相当于 a = a - 1

System.out.println(a); // 输出2

a *= 3; // 相当于 a = a * 3

System.out.println(a); // 输出6

a /= 3; // 相当于 a = a / 3

System.out.println(a); // 输出2

a %= 3; // 相当于 a = a % 2

System.out.println(a); // 输出2

3.自增 / 自减运算符

+ +是给变量的值+1,- -是给变量的值减1.

int a = 1;

a++; // 后置++ 表示给a的值加1,此时a的值为2

System.out.println(a++); // 注意:后置++是先使用变量原来值,表示式结束时给变量+1,因此输出2

System.out.println(a); // 输出3

++a; // 前置++ 表示给a的值加1

System.out.println(++a); // 注意:前置++是先给变量+1,然后使用变量中的值,因此输出5

System.out.println(a); // 输出5

// --操作符给操作-1,与++含义类似

注意:

如果单独使用,【前置++】和【后置++】没有任何区别

如果混合使用,【前置++】先+1,然后使用变量+1之后的值,【后置++】先使用变量原来的值,表达式结束时给变量+1

只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改

7.关系运算符

关系运算符主要有六个: ==  !=  < >  <=  >= ,其计算结果是 true 或者 false

int a = 10;
int b = 20;
// 注意:在Java中 = 表示赋值,要与数学中的含义区分
// 在Java中 == 表示相等
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a < b); // true
System.out.println(a > b); // false
System.out.println(a <= b); // true
System.out.println(a >= b); // false

注意:当需要多次判断时,不能连着写,比如:3 < a < 5,Java程序与数学中是有区别的

 

8.逻辑运算符

逻辑运算符主要有三个:&& ||  !,运算结果都是boolean类型。

1.逻辑&&

语法规则:表达式一  &&  表达式二,左右表达式必须是boolean类型的结果。

两个表达式都为真,结果才是真,只要有一个是假,结果就是假。

int a = 1;
int b = 2;
System.out.println(a == 1 && b == 2); // 左为真 且 右为真 则结果为真
System.out.println(a == 1 && b > 100); // 左为真 但 右为假 则结果为假
System.out.println(a > 100 && b == 2); // 左为假 但 右为真 则结果为假
System.out.println(a > 100 && b > 100); // 左为假 且 右为假 则结果为假

2.逻辑 | |

语法规则:表达式1 || 表达式2,左右表达式必须是boolean类型的结果。

两个表达式都为假,结果才是假,只要有一个是真,结果就是真。

int a = 1;
int b = 2;
System.out.println(a == 1 || b == 2); // 左为真 且 右为真 则结果为真
System.out.println(a == 1 || b > 100); // 左为真 但 右为假 则结果也为真
System.out.println(a > 100 || b == 2); // 左为假 但 右为真 则结果也为真
System.out.println(a > 100 || b > 100); // 左为假 且 右为假 则结果为假

3.逻辑非

语法规则: !表达式

真变假,假变真

int a = 1;
System.out.println(!(a == 1)); // a == 1 为true,取个非就是false
System.out.println(!(a != 1)); // a != 1 为false,取个非就是true

4.短路求值

&& 和 || 遵循短路求值规则。

System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false
System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true

我们都知道, 计算 10 / 0 会导致程序抛出异常. 但是上面的代码却能正常运行, 说明 10 / 0 并没有真正被求值。

注意:

  • 对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
  • 对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.
  • & 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值.
System.out.println(10 > 20 & 10 / 0 == 0); // 程序抛出异常
System.out.println(10 < 20 | 10 / 0 == 0); // 程序抛出异常

9.条件运算符

条件运算符只有一个:

表达式1 ? 表达式2 : 表达式3

当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;

当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.

也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法

 

// 求两个整数的最大值

int a = 10;

int b = 20;

int max = a > b ? a : b

目录
相关文章
|
19天前
|
Java 程序员 容器
Java中的变量和常量:数据的‘小盒子’和‘铁盒子’有啥不一样?
在Java中,变量是一个可以随时改变的数据容器,类似于一个可以反复打开的小盒子。定义变量时需指定数据类型和名称。例如:`int age = 25;` 表示定义一个整数类型的变量 `age`,初始值为25。 常量则是不可改变的数据容器,类似于一个锁死的铁盒子,定义时使用 `final` 关键字。例如:`final int MAX_SPEED = 120;` 表示定义一个名为 `MAX_SPEED` 的常量,值为120,且不能修改。 变量和常量的主要区别在于变量的数据可以随时修改,而常量的数据一旦确定就不能改变。常量主要用于防止意外修改、提高代码可读性和便于维护。
|
2月前
|
Java 编译器
java“变量 x 可能未被初始化”解决
在Java中,如果编译器检测到变量可能在使用前未被初始化,会报“变量 x 可能未被初始化”的错误。解决方法包括:1. 在声明变量时直接初始化;2. 确保所有可能的执行路径都能对变量进行初始化。
|
26天前
|
Java 编译器
Java重复定义变量详解
这段对话讨论了Java中变量作用域和重复定义的问题。学生提问为何不能重复定义变量导致编译错误,老师通过多个示例解释了编译器如何区分不同作用域内的变量,包括局部变量、成员变量和静态变量,并说明了使用`this`关键字和类名来区分变量的方法。最终,学生理解了编译器在逻辑层面检查变量定义的问题。
Java重复定义变量详解
|
22天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
45 4
|
20天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
34 1
|
2月前
|
算法 Java 测试技术
🌟Java 零基础 | 详解 单目运算符
【10月更文挑战第14天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
43 7
|
2月前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
2月前
|
Java 测试技术 开发者
🌟Java 零基础 | 深入理解三目运算符
【10月更文挑战第13天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
25 3
|
2月前
|
存储 Java 关系型数据库
[Java]“不同族”基本数据类型间只能“强转”吗?
本文探讨了不同位二进制表示范围的计算方法,重点分析了Java中int和char类型之间的转换规则,以及float与int类型之间的转换特性。通过具体示例说明了显式和隐式转换的条件和限制。
38 0
[Java]“不同族”基本数据类型间只能“强转”吗?
|
2月前
|
Java 测试技术 开发者
🌟Java零基础-Lambda运算符详解 🌟
【10月更文挑战第12天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
23 1