从初学者到专家:Java 数据类型和变量的完整指南

news2024/11/20 10:45:09

目录

一、字面常量

1.1什么常量?

1.2常见的六种常量类型

二、数据类型

2.1什么是数据类型?

2.2基本数据类型:

2.3引用数据类型

三、变量

3.1什么是变量?

3.2变量的命名规则

3.3变量的作用域

3.4变量的被final修饰

四.类型转换

4.1什么是类型转换?

4.2自动类型转换

4.3强制类型转换 

4.4注意事项

4.5类型提升

五.字符串类型

5.1什么是Java字符串类型?

5.2如何创建和使用字符串?

5.3常见的字符串操作

 5.3字符串与不同类型之间的转换


声明:Java的数据类型与变量

在Java中,数据类型是指变量存储数据的类型,Java支持多种基本数据类型,包括整型、浮点型、字符型、布尔型等等。对于不同的数据类型,Java也提供了不同的字面常量来表示它们的值。在使用Java进行编程时,了解数据类型及其特点是非常重要的。

一、字面常量

1.1什么常量?

字面常量是指程序中直接使用的常量值,不需要进行计算或处理。在Java中,字面常量包括以下几种类型:

1.2常见的六种常量类型

1. 整型常量
整型常量表示整数值,可以用十进制、八进制或十六进制来表示。


int decimalValue = 10; // 十进制
int octalValue = 012; // 八进制
int hexValue = 0xA; // 十六进制

2. 浮点型常量
浮点型常量表示实数值,包括单精度浮点型双精度浮点型


float floatValue = 3.14f; // 单精度浮点型
double doubleValue = 3.14; // 双精度浮点型

3. 字符常量
字符常量表示单个字符,用单引号括起来。

char charValue = 'a'; // 字符常量

4. 字符串常量
字符串常量表示多个字符组成的字符串,用双引号括起来。

String stringValue = "Hello, World!"; // 字符串常量

5. 布尔型常量
布尔型常量表示真或假,用truefalse关键字表示。

boolean boolValue_1 = true; // 布尔型常量
boolean boolValue_2 = false; // 布尔型常量

6. null常量
null常量表示空对象引用

String strValue = null; // null常量

二、数据类型

2.1什么是数据类型?

Java的数据类型分为两类:基本数据类型和引用数据类型。基本数据类型包括整型、浮点型、字符型和布尔型,它们都是Java语言提供的内置类型。引用数据类型包括类、接口、数组等,它们都是在程序中自定义的类型。

2.2基本数据类型:

1. 整型
整型数据类型包括byte、short、int和long四种类型,它们分别占用1、2、4和8个字节,并且有不同的取值范围。如下表格:

整型数据类型
类型占用空间取值范围
byte1字节-128~127
short2字节-32768~32767
int 4字节-2147483648~2147483647
long8字节-9223372036854775808~9223372036854775807

2. 浮点型
浮点型数据类型包括float和double两种类型,它们分别占用4和8个字节,并且有不同的精度和取值范围。


 

float f = 3.14f; 
double d = 3.14;
浮点数据类型
类型占用空间精度范围
float4字节精度为6~7位
double8字节精度为15~16位

3. 字符型
字符型数据类型char占用2个字节,用于表示Unicode编码的字符。

char c = 'a'; // 字符型数据类型

4. 布尔型
布尔型数据类型boolean只有两个取值:true和false,占用1个字节。

boolean b1 = true; // 布尔型数据类型
boolean b2 = false; // 布尔型数据类型


2.3引用数据类型

Java中的引用数据类型包括类、接口、数组、枚举、注解等。这些类型的数据都是通过引用方式存储在堆内存中的。

1. 类

类是面向对象编程的基础,Java中的所有类都是引用数据类型。类可以包含属性、方法和构造函数等成员,通过创建对象来使用类的成员。

public class lhy {
    public static void main(String[] args) {
        class Person {
 String name;
 int age;

    void sayHello() {
 System.out.println("Hello, my name is " + name + ", I'm " + age + " years old.");
}
        }

        Person p = new Person(); // 创建Person类的对象p
        p.name = "Tom";
        p.age = 25;
        p.sayHello(); // 输出:Hello, my name is Tom, I'm 25 years old.

    }
}

输出如下:


2. 接口

接口是一种抽象的类型,它定义了一组方法的签名,但没有实现这些方法的具体代码。接口可以被类实现,一个类可以实现多个接口。

interface Flyable {
  void fly();
}

class Bird implements Flyable {
  public void fly() {
    System.out.println("I'm a bird, I'm flying.");
  }
}

Bird b = new Bird(); // 创建Bird类的对象b
b.fly(); // 输出:I'm a bird, I'm flying.

输出如下: 


3. 数组

数组是一种存储多个相同类型数据的容器,Java中的数组可以存储任何类型的数据,包括基本类型和引用类型。

int[] nums = new int[]{1, 2, 3}; // 声明一个int类型的数组nums
String[] names = new String[]{"Tom", "Jerry", "Alice"}; // 声明一个String类型的数组names

4. 枚举

枚举是一种特殊的类型,它限定了变量只能取枚举中定义的值,可以避免使用数字或字符串表示状态等情况下的错误。

enum Color {
  RED, GREEN, BLUE
}

Color c = Color.RED; // 声明一个Color类型的变量c

5. 注解

注解是一种用于提供元数据信息的标记,它可以用于类、方法、变量等元素上,用于描述它们的属性和特征。注解可以通过反射机制获取

除了以上提到的引用数据类型之外,Java还有许多其他的数据类型,如集合、映射等,这些数据类型在Java的开发中也是非常常用的。在实际开发中,开发人员需要根据具体的业务需求选择合适的数据类型来完成开发任务。

三、变量

3.1什么是变量?

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

定义变量的语法格式为:

数据类型 变量名 = 初始值;
public class lhy {
    public static void main(String[] args) {
        int a = 10; // 定义整形变量a,a是变量名也称为标识符,该变量中放置的值为10

        double d = 3.14;
        char c = 'A';
        boolean b = true;
        System.out.println(a);
        System.out.println(d);
        System.out.println(c);
        System.out.println(b);
        a = 100; // a是变量,a中的值是可以修改的,注意:= 在java中表示赋值,即将100交给a,a中保存的值就是100
        System.out.println(a);
// 注意:在一行可以定义多个相同类型的变量
        int a1 = 10, a2 = 20, a3 = 30;
        System.out.println(a1);
        System.out.println(a2);
        System.out.println(a3);

    }
}


如下所示: 


3.2变量的命名规则

变量的命名需要遵循一定的规则,变量名必须由字母、数字、下划线或美元符号组成,不能以数字开头,且不能是Java的关键字。

int myNumber; // 正确的变量名
double $price; // 正确的变量名
char _firstChar; // 正确的变量名
boolean isOK; // 正确的变量名
String 1stString; // 错误的变量名,不能以数字开头

3.3变量的作用域

变量的作用域是指变量在程序中可访问的范围,Java中的变量具有作用域,即变量只在声明它的代码块中可见。

public void foo() {
    int a = 10; // 只在foo()方法中可见
    if (a > 5) {
        int b = 20; // 只在if语句块中可见
    }
    System.out.println(a); // 可以访问变量a
    System.out.println(b); // 错误,无法访问变量b
}

3.4变量的被final修饰

在Java中,变量还可以被final修饰,表示该变量是一个常量,一旦赋值就不能再被改变。

final int a = 10; // 声明一个常量a,不能再被改变
final double PI = 3.14; // 声明一个常量PI,不能再被改变

四.类型转换

4.1什么是类型转换?

Java 作为一个强类型编程语言 , 当不同类型之间的变量相互赋值的时候 , 会有较严格的校验 .
int a = 10;
long b = 100L;
b = a; // 可以通过编译
a = b; // 编译失败
Java 中,当参与运算数据类型不一致时,就会进行类型转换。 Java 中类型转换主要分为两类:自动类型转换 (隐式) 强制类型转换 (显式)

自动类型转换

4.2自动类型转换

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

如下代码: 

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的数据范围,有数据丢失

4.3强制类型转换 

强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的。

如下代码:

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; // 编译失败:类型不兼容

4.4注意事项

1. 不同数字类型的变量之间赋值 , 表示范围更小的类型能隐式转换成范围较大的类型
2. 如果需要把范围大的类型赋值给范围小的 , 需要强制类型转换 , 但是 可能精度丢失
3. 将一个字面值常量进行赋值的时候 , Java 会自动针对数字范围进行检查
4. 强制类型转换不一定能成功,不相干的类型不能互相转换


4.5类型提升

什么是类型提升?

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

1. intlong之间: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

2. byte byte 的运算
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);

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

解析:

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);
小结:
1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.

五.字符串类型

5.1什么是Java字符串类型?

在 Java 中,字符串是一个对象,它是由一系列字符组成的,可以包含字母、数字、符号等。Java 字符串类型是不可变的,这意味着一旦创建了一个字符串对象,就不能对其进行更改。如果需要修改一个字符串,需要创建一个新的字符串对象。

5.2如何创建和使用字符串?

 要创建一个字符串对象,可以使用字符串字面量或字符串构造函数。字符串字面量是由一对双引号括起来的字符序列,例如:

String str1 = "Hello, World!";

字符串构造函数可以通过传递一个字符数组或另一个字符串来创建一个新的字符串对象,例如: 

char[] charArray = {'H', 'e', 'l', 'l', 'o'};
String str2 = new String(charArray);
String str3 = new String("Hello");

 要访问字符串中的字符,可以使用字符索引或字符串方法。例如,要获取字符串中的第一个字符,可以使用以下代码:

String str1 = "Hello, World!";
char firstChar = str1.charAt(0);

5.3常见的字符串操作

Java 提供了许多用于操作字符串的方法,包括以下几个常见的例子:

字符串比较

要比较两个字符串是否相等,可以使用 equals() 方法,例如:

String str4 = "Hello";
boolean isEqual = str3.equals(str4); // true

字符串连接

可以使用加号运算符或 concat() 方法将两个字符串连接起来,例如:

String str5 = "Hello";
String str6 = "World";
String str7 = str5 + " " + str6; // "Hello World"
String str8 = str5.concat(" ").concat(str6); // "Hello World"

字符串长度

可以使用 length() 方法获取字符串中字符的数量,例如:

int length = str1.length(); // 13

字符串截取

可以使用 substring() 方法获取字符串的一个子串,例如:

String subStr = str1.substring(0, 5); // "Hello"

字符串转换

可以使用 将toUpperCase() 和 toLowerCase() 方法字符串转换为大写或小写形式,例如:

String str9 = "Hello";
String str10 = str9.toUpperCase(); // "HELLO"
String str11 = str9.toLowerCase(); // "hello"

 5.3字符串与不同类型之间的转换

字符串转换为整数

可以使用 Integer.parseInt() 方法将字符串转换为整数。例如:

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

字符串转换为浮点数 

可以使用 Double.parseDouble() 方法将字符串转换为浮点数。例如:

String str = "3.14";
double num = Double.parseDouble(str);

整数或浮点数转换为字符串

可以使用 String.valueOf() 方法将整数或浮点数转换为字符串。例如:

int num = 123;
String str1 = String.valueOf(num);

double num2 = 3.14;
String str2 = String.valueOf(num2);

 

字符串转换为字符数组

可以使用 toCharArray() 方法将字符串转换为字符数组。例如:

String str = "Hello";
char[] charArray = str.toCharArray();

字符数组转换为字符串

可以使用 String(char[] data) 构造函数将字符数组转换为字符串。例如:

char[] charArray = {'H', 'e', 'l', 'l', 'o'};
String str = new String(charArray);

 好了,到这里就结束了,如果有什么错误的地方请在评论区指出,谢谢。

创作不易,如果可以的的话,请大家多三连支持一下下。五条老师会很赞同的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/830434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 外部变量和外部函数

1.外部变量 如果一个变量除了在定义它的源文件中可以使用外,还能被其他文件使用,那么就称这个变量为外部变量。命名空间作用域中定义的变量,默认情况下都是外部变量,但在其他文件中如果需要使用这一变量,需要用extern…

CAS - 原理简介

CAS是JDK提供的非阻塞原子操作,它通过硬件保证了比较-更新的原子性。它是非阻塞的且自身具有原子性,也就是说CAS效率高、可靠。CAS是一条CPU的原子指令(cmpxchg指令),不会造成所谓的数据不一致问题,Unsafe类提供的CAS方法&#xf…

【内网穿透】内网穿透应用场景

伴随着科学技术的进步,我们身边出现了越来越多的电子设备,特别是移动电子设备的普及,给我们的生活带来极大的便利,而软件技术的发展,更为这些软件设备带来更多应用的可能。虽然移动设备覆盖了了我们生活的绝大部分场景…

Mybatis引出的一系列问题-JDBC 的探究

1 引入对JDBC的理解-1 一般来说,Java应用程序访问数据库的过程是: 装载数据库驱动程序;通过jdbc建立数据库连接;访问数据库,执行sql语句;断开数据库连接。 Public void FindAllUsers(){//1、装载sqlserve…

面试热题(接雨水问题)

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 我们看到题的第一步,永远是对入参进行判断 public int trap(int[] height) {if (height null) {return 0;}...} 但是我们想想看,接…

uniapp微信小程序底部弹窗自定义组件

基础弹窗效果组件 <template><view><viewclass"tui-actionsheet-class tui-actionsheet":class"[show ? tui-actionsheet-show : ]"><view class"regional-selection">底部弹窗</view></view><!-- 遮罩…

教你使用Pyinstaller将Python源码打包成可执行程序exe的方法

pyinstaller是一个常用的Python打包工具&#xff0c;可以将Python程序打包成独立的可执行文件&#xff0c;支持Windows、Linux和macOS等平台。 ★★★Pyinstaller有许多参数&#xff0c;以下是其中一些主要参数的含义&#xff1a; -F, --onefile&#xff1a;打包一个单个文件…

Excel如何把两列互换

第一步&#xff1a;选择一列 打开excel&#xff0c;选中一列后将鼠标放在列后&#xff0c;让箭头变成十字方向。 第二步&#xff1a;选择Shift键 按住键盘上的Shift键&#xff0c;将列往后移动变成图示样。 第三步&#xff1a;选择互换 完成上述操作后&#xff0c;松开鼠标两…

Netty框架:ByteBuf空间不够时自动扩充空间

说明 使用Netty的ByteBuf&#xff0c;空间不够时可以自动扩充。扩充时&#xff0c;不是一个字节一个字节的扩充&#xff0c;而是扩充一段空间。对于不同的ByteBufAllocator实现&#xff0c;每次扩充的空间大小也不相同。 代码举例 使用Unpooled分配ByteBuf 下面这段代码&am…

数据结构 | 搜索和排序——搜索

目录 一、顺序搜索 二、分析顺序搜索算法 三、二分搜索 四、分析二分搜索算法 五、散列 5.1 散列函数 5.2 处理冲突 5.3 实现映射抽象数据类型 搜索是指从元素集合中找到某个特定元素的算法过程。搜索过程通常返回True或False&#xff0c;分别表示元素是否存在。有时&a…

快速WordPress个人博客并内网穿透发布到互联网

快速WordPress个人博客并内网穿透发布到互联网 文章目录 快速WordPress个人博客并内网穿透发布到互联网 我们能够通过cpolar完整的搭建起一个属于自己的网站&#xff0c;并且通过cpolar建立的数据隧道&#xff0c;从而让我们存放在本地电脑上的网站&#xff0c;能够为公众互联网…

Qt+GDAL开发笔记(二):在windows系统msvc207x64编译GDAL库、搭建开发环境和基础Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/132077288 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

阿里云平台注册及基础使用

首先进入阿里云官网&#xff1a; 阿里云-计算&#xff0c;为了无法计算的价值 点击右上角“登录/注册”&#xff0c;如果没有阿里云账号则需要注册。 注册界面&#xff1a; 注册完成后需要开通物联网平台公共实例&#xff1a; 注册成功后的登录&#xff1a; 同样点击右上角的…

改进的智能优化算法定性分析:探索与开发分析(Analysis of the exploration and exploitation)

目录 一、改进的智能优化算法探索与开发分析 二、GWO1与GWO探索与开发分析运行结果 三、GWO1与GWO探索与开发实验对比分析 四、代码获取 一、改进的智能优化算法探索与开发分析 智能优化算法旨在将搜索过程分为两个阶段&#xff1a;探索和开发。平衡这两个阶段对于增强算法…

智能化RFID耳机装配系统:提升效率、精准追踪与优化管理

智能化RFID耳机装配系统&#xff1a;提升效率、精准追踪与优化管理 在当今的智能化时代&#xff0c;无线射频识别技术&#xff08;RFID&#xff09;被广泛应用于各个行业。本文将介绍一种基于RFID技术的智能耳机装配案例&#xff0c;通过RFID技术实现耳机装配过程的自动化控制…

ffmpeg.c源码与函数关系分析

介绍 FFmpeg 是一个可以处理音视频的软件&#xff0c;功能非常强大&#xff0c;主要包括&#xff0c;编解码转换&#xff0c;封装格式转换&#xff0c;滤镜特效。FFmpeg支持各种网络协议&#xff0c;支持 RTMP &#xff0c;RTSP&#xff0c;HLS 等高层协议的推拉流&#xff0c…

关于前后端分离

关于前后端分离 接下来&#xff0c;你将进入 前后端分离项目开发 模块。 这也是企业中比较常见的开发模式。 疑问&#xff1a; 什么是前后端分离&#xff1f;与之前的开发模式有什么区别&#xff1f;企业为什么要用前后端分离&#xff1f; 1. 什么是前后端分离&#xff1f;…

把网站改为HTTPS访问方法

HTTPS是使用TSL/SSL加密超文本传输协议的扩展&#xff0c;用于跨网络的安全传输。网站更改为HTTPS&#xff0c;直接在网站形象上可以得到提升&#xff0c;更重要的是您的网站肯定会在排名和提升方面受益。机密信息的交换需要受到保护&#xff0c;以阻止未经授权的访问。 加密&a…

[回馈]ASP.NET Core MVC开发实战之商城系统(五)

经过一段时间的准备&#xff0c;新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始&#xff0c;在之前的文章中&#xff0c;讲解了商城系统的整体功能设计&#xff0c;页面布局设计&#xff0c;环境搭建&#xff0c;系统配置&#xff0c;及首页【商品类型&#xff0c;ba…

Micropython STM32F4入门点灯第一课

Micropython STM32F4入门点灯第一课 &#x1f4cc;固件刷可参考前面一篇《STM32刷Micropython固件参考指南》&#x1f4cd;固件下载&#xff1a;https://micropython.org/download/?mcustm32f4&#x1f516;本例程基于STM32F4DISC&#xff0c;主控芯片STM32F4VGT6&#x1f4d1…