Java基础--2.常量,变量,数据类型,运算符

本文深入讲解Java编程的基础概念,包括常量、变量、数据类型、运算符及其转换规则。涵盖整数、浮点数、字符、布尔类型的使用,以及变量的定义与作用范围。解析自动与强制类型转换,并详细说明各种运算符的功能与使用场景。

一. 常量

1.1 定义

常量:是指在Java程序中固定不变的数据

1.2 分类

类型含义数据举例
整数常量所有的整数0 , 1, -1
小数常量所有的小数0.0, -0.1, 2.55
字符常量单引号引起来,有且只有一个字符‘a’,’’,‘好’
字符串常量双引号引起来,可以写多个字符,也可以不写“a”,“adafd”,“您好”,""
布尔常量只有两个值true,false
空常量只有一个值null

二. 变量

2.1 定义

变量:变量是内存中的一小块区域,其值可以在一定范围内变化

​ Java中要求一个变量每次只能保存一个数据,必须要明确保存的数据类型。

2.2 变量的组成

​ a.变量只能在一定范围内变化,通过数据类型来限定

​ b.通过变量名来找到这块区域

​ c.变量中需要有数据,初始化值

2.3 变量的格式

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

三. 数据类型

3.1 数据类型分类

基本数据类型:包括 整数 、 浮点数 、 字符 、 布尔 。

引用数据类型:包括 类 、 数组 、 接口

3.2 基本数据类型

数据类型关键字数据类型取值范围
字节型byte1个字节-128~127
短整型short2个字节-32768~32767
整型int(默认)4个字节-2147483648~2147483647
长整型long8个字节-2的63次方~2的63次方-1
单精度浮点数float4个字节1.4013E-45~3.4028E+38
双精度浮点数double(默认)8个字节4.9E-324~1.7977E+308
字符型char2个字节0-65535
布尔类型boolean1个字节true,false

3.3 变量的定义

​ 数据类型 变量名 = 数据值;

​ long类型:建议数据后加L表示。

​ float类型:建议数据后加F表示。

3.4 定义变量注意事项

​ 1. 定义的变量,不赋值不能使用。

​ 2.同一个方法中变量名不能重复。

​ 3.变量只在定义时的{}中有效。

四. 数据类型转换

4.1 自动转换

自动转换:将取值范围小的类型 自动提升为 取值范围大的类型 。

转换规则: 范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为 int 。

​ byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double

4.2 强制转换

强制转换:将取值范围大的类型 强制转换成 取值范围小的类型 。

强制转换格式: 数据类型 变量名 = (数据类型)被转数据值;

强烈注意:

​ 浮点转成整数,直接取消小数点,可能造成数据损失精度。

​ int 强制转成 short 砍掉2个字节,可能造成数据丢失。

五. 运算符

5.1 定义及分类

​ **定义:**对变量进行操作的符号

​ **分类:**算数运算符 , 赋值运算符 , 比较运算符 , 逻辑运算符 , 三元运算符

5.2 算术运算符

符号作用
+加法运算,字符串拼接运算
-减法运算
*乘法运算
/除法运算
%取模运算,两个数字相除取余数
++ , –自增自减运算
5.2.1 注意事项

​ 1.取余结果符号与左边符号相同

​ 2.运算,变量自己增长1。反之, – 运算,变量自己减少1,用法与 ++ 一致。

​ 独立运算:

​ 变量在独立运算时, 前++ 和 后++ 没有区别 。

变量 前++ :例如 ++i 。

变量 后++ :例如 i++ 。

​ 混合运算:

​ 和其他变量放在一起, 前++ 和 后++ 就产生了不同。

变量 前++ :变量a自己加1,将加1后的结果赋值给b,也就是说a先计算。a和b的结果都是2。

变量 后++ :变量a先把自己的值1,赋值给变量b,此时变量b的值就是1,变量a自己再加1。a 的结果是2,b的结果是1。

public static void main(String[] args) { 
    int a = 1; 
    int b = a++; // 先=赋值,后++ 
    System.out.println(a);//计算结果是2 
    System.out.println(b);//计算结果是1 
}

​ 3.+ 符号在字符串中的操作:

​ + 符号在遇到字符串的时候,表示连接、拼接的含义。

​ “a”+"b"的结果是“ab”,连接含义

5.3 赋值运算符

赋值运算符:就是将符号右边的值,赋给左边的变量

符号作用
=赋值
+=加后赋值
-=减后赋值
*=乘后赋值
/=除后赋值
%=取模后赋值

5.4 比较运算符

符号作用
==比较符号两边数据是否相等,相等结果是true。
<比较符号左边的数据是否小于右边的数据,如果小于结果是true。
>比较符号左边的数据是否大于右边的数据,如果大于结果是true。
<=比较符号左边的数据是否小于或者等于右边的数据,如果小于或等于结果是true。
>=比较符号左边的数据是否大于或者等于右边的数据,如果小于或等于结果是true。
!=不等于符号 ,如果符号两边的数据不相等,结果是true。

5.5 逻辑运算符

运算符运算规则范例结果
&false & truefalse
|false | truetrue
^异或true ^ falsetrue
!!truefalse
&&短路与false && truefalse
||短路或false || truetrue

5.6 三元运算符

​ **格式:**数据类型 变量名 = 布尔类型表达式?结果1:结果2;

计算方式:

​ 布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。

​ 布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。

<think>好的,我需要帮助用户了解Java基础知识,包括变量常量数据类型、类包装、运算符、字符串和数组等内容。首先,我得整理一下用户提到的各个部分,并参考提供的引用资料来确保信息准确。 首先,变量常量基础中的基础。根据引用[2]和[4],变量需要在使用前赋值,名称在同一个作用域内不能重复。常量用final关键字声明,这点需要明确说明。接下来是数据类型,基本数据类型包括byte、short、int、long、float、double、char、boolean,引用[3]提到了数据类型转换的规则,自动转换和强制转换都要解释清楚,特别是低精度到高精度的自动转换,以及强制转换可能带来的精度丢失。 然后是类包装,也就是基本数据类型的包装类,比如Integer对应int,Character对应char等。这部分需要说明自动装箱和拆箱的概念,可能还需要提到它们的用途,比如在集合中的使用。 运算符部分,引用[4]提到了算术运算符、比较运算符和逻辑运算符。需要分别举例说明,比如算术运算符中的加减乘除,比较运算符如==和!=,逻辑运算符如&&和||。此外,三元运算符也是一个重点,可以举一个简单的例子说明用法。 字符串操作方面,Java中的String类是不可变的,每次操作都会生成新对象。StringBuilder和StringBuffer的区别需要提到,特别是线程安全性方面。常用方法如substring、length、concat等,最好给出示例代码。 数组的定义和初始化,引用[4]提到了动态和静态初始化,要说明如何声明数组,比如int[] arr,以及初始化的两种方式。多维数组也需要简要说明,比如二维数组的声明和初始化。 在整理这些内容时,要确保符合用户的要求,使用正确的LaTeX格式。例如,变量名用$variable$,代码块用三个反引号包裹,并注明语言。同时,引用资料中的内容要在适当的位置添加引用标识,比如在提到变量赋值时引用[2],数据类型转换引用[3]等。 可能还需要检查是否有遗漏的部分,比如类包装的具体例子,或者字符串操作中的更多方法。此外,用户提到的输入输出部分在引用[1]中提到了Scanner类和文件操作,但用户的问题中没有明确提到输入输出,可能需要判断是否包含进去。根据用户的问题,主要集中在变量常量数据类型、类包装、运算符、字符串和数组,所以可能不需要详细展开输入输出,但可以简要提及。 最后,生成相关问题时要覆盖各个知识点,比如变量作用域、自动装箱、不可变字符串的影响、数组越界异常等。确保问题有针对性,帮助用户进一步学习。 现在需要将这些思考整理成一个结构清晰的中文回答,使用正确的格式,并附上相关问题。</think>### Java 基础教程 #### 一、变量常量 1. **变量** - **定义**:变量用于存储数据,需先声明后使用。 - **命名规则**:同一作用域内变量名不可重复[^2],例如: ```java int age = 20; // 正确 // int age = 30; 错误,重复定义 ``` - **赋值**:变量必须初始化后才能使用[^4],如 `int age; age = 10;`。 2. **常量** - 使用 `final` 关键字声明,值不可修改: ```java final double PI = 3.1415; ``` #### 二、基本数据类型与转换 1. **8种基本类型** - 整型:`byte`(1字节)、`short`(2)、`int`(4)、`long`(8) - 浮点型:`float`(4)、`double`(8) - 字符型:`char`(2- 布尔型:`boolean`(1位) 2. **类型转换** - **自动转换**:低精度 $\rightarrow$ 高精度(如 `int` → `double`)[^3] ```java int a = 10; double b = a; // 自动转换 ``` - **强制转换**:高精度 $\rightarrow$ 低精度,可能丢失精度: ```java double c = 3.14; int d = (int)c; // d=3 ``` 3. **包装类** - 基本类型对应类(如 `Integer`、`Double`),支持自动装箱/拆箱: ```java Integer num = 10; // 自动装箱 int n = num; // 自动拆箱 ``` #### 三、运算符 1. **算术运算符**:`+`、`-`、`*`、`/`、`%`(取模) ```java int result = 10 % 3; // result=1 ``` 2. **比较运算符**:`==`、`!=`、`>`、`<`,返回布尔值。 3. **逻辑运算符**:`&&`(与)、`||`(或)、`!`(非) ```java boolean flag = (a > 5) && (b < 10); ``` 4. **三元运算符**: ```java int max = (a > b) ? a : b; ``` #### 四、字符串操作 1. **不可变性** - `String` 对象一旦创建不可修改,操作会生成新对象: ```java String s1 = "Hello"; String s2 = s1.concat(" World"); // s1仍为"Hello" ``` 2. **常用方法** - 截取:`substring(起始索引, 结束索引)` - 长度:`length()` - 分割:`split("分隔符")` 3. **可变字符串** - `StringBuilder`(非线程安全)和 `StringBuffer`(线程安全): ```java StringBuilder sb = new StringBuilder(); sb.append("Java"); ``` #### 五、数组 1. **定义与初始化** - **静态初始化**:直接赋值 ```java int[] arr1 = {1, 2, 3}; ``` - **动态初始化**:指定长度 ```java int[] arr2 = new int[5]; ``` 2. **多维数组** ```java int[][] matrix = {{1,2}, {3,4}}; ``` 3. **注意事项** - 访问越界会抛出 `ArrayIndexOutOfBoundsException`。 --- §§ 1. Java 中 `final` 关键字除了修饰常量,还有什么用途? 2. 自动装箱和拆箱在性能上有什么潜在问题? 3. 如何避免 `String` 频繁拼接导致的性能问题? 4. 多维数组在内存中是如何存储的? 5. 包装类 `Integer` 的缓存机制是什么? 6. 如何正确处理数组越界异常?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值