Java中的变量与数据类型

在Java编程中,变量和数据类型是构建程序的基础。理解它们的特性和使用方法,是掌握Java编程的第一步。

变量:程序中的"容器"

变量就如同数学中的代数概念,是用来存储数据的容器。在Java中,变量必须先定义后使用,这是Java作为强类型语言的基本要求。

变量的定义与使用

定义变量的基本语法是:数据类型 变量名 = 初始值;。例如:

int score = 90; // 定义一个int类型的变量score,初始值为90

如果定义变量时不指定初始值,Java会自动赋予默认值(对于整型变量,默认值为0)。但为了代码的可读性和安全性,建议显式地为变量赋值。

变量的特性

  • 可重新赋值:变量的内容可以被多次修改。例如:

    int age = 20;
    age = 21; // 正确,重新赋值

    注意,重新赋值时不能再次指定数据类型,否则会导致报错。

  • 可相互赋值:一个变量的值可以传递给另一个变量。例如:

    int a = 10;
    int b = a; // 将a的值赋给b,此时b的值为10

    这种赋值是值的传递,修改其中一个变量不会影响另一个变量的值。

基本数据类型:计算机可直接运算的类型

Java定义了8种基本数据类型,它们是CPU可以直接进行运算的类型。这些类型按类别可分为四大类:

整数类型

整数类型用来存储没有小数部分的数值,Java中的整数类型都是带符号的(即可表示正数和负数)。

类型 占用字节 表示范围
byte 1字节 -128 ~ 127
short 2字节 -32768 ~ 32767
int 4字节 -2147483648 ~ 2147483647
long 8字节 -9223372036854775808 ~ 9223372036854775807

定义long类型变量时,需要在数值后加L后缀:

long bigNumber = 123456789012345L;

整数可以用十进制、十六进制(前缀0x)或二进制(前缀0b)表示,例如:

int dec = 100;      // 十进制
int hex = 0x64; // 十六进制,等同于100
int bin = 0b1100100; // 二进制,等同于100
int octalInt = 0123; // 八进制,前缀0,0123 对应的十进制数是 83

浮点类型

浮点类型用于表示带小数部分的数值,包括float和double两种:

类型 占用字节 表示范围
float 4字节 约±3.4x10³⁸
double 8字节 约±1.79x10³⁰⁸

定义float类型变量时,需要在数值后加f后缀:

float pi = 3.14f;

浮点类型可以用科学计数法表示,例如:

double speed = 3.0e8; // 表示3.0×10⁸

字符类型

char类型用于表示单个字符,占用2个字节,可存储Unicode字符:

char c1 = 'A';
char c2 = '中';

注意,char类型使用单引号',而字符串使用双引号"

布尔类型

boolean类型只有两个取值:true(真)和false(假),通常用于表示条件判断的结果:

boolean isPass = true;
boolean hasError = false;
boolean isGreater = 5 > 3; // 结果为true

JAVA规范中没有定义boolean类型的大小,但其到底占用了几个字节,还是得依赖于虚拟机的具体实现,符合规范的虚拟机就是1字节或者4字节。

相关内容可参考:https://www.cnblogs.com/tangshun100/p/13173006.html

引用类型

除了上述基本类型,Java中还有引用类型。引用类型变量存储的是对象的引用(类似C语言中的指针),而不是对象本身。最常用的引用类型是String(字符串):

String name = "Java";

关于引用类型的更多内容,将在后续介绍类和对象时详细讨论。

常量:不可改变的值

如果希望变量的值在初始化后不再被修改,可以使用final关键字定义常量:

final double PI = 3.14159;

常量命名通常使用全大写字母,多个单词之间用下划线分隔,这是Java的命名规范。

使用常量的好处是提高代码的可维护性和可读性。当需要修改常量值时,只需在定义处修改一次,而不必在所有使用的地方逐一修改。

简化变量定义:var关键字

从Java 10开始,引入了var关键字,可以简化变量定义。var会根据赋值自动推断变量类型:

var sb = new StringBuilder(); // 等同于 StringBuilder sb = new StringBuilder();

使用var可以减少代码冗余,但也可能降低代码的可读性,应根据实际情况合理使用。

变量的作用范围

变量的作用范围(作用域)是指变量可以被访问的代码区域。在Java中,变量的作用域由{}来界定:

{
int x = 10; // x的作用域开始
{
int y = 20; // y的作用域开始
System.out.println(x + y); // 可以访问x和y
} // y的作用域结束
// System.out.println(y); // 错误,y已超出作用域
} // x的作用域结束

遵循"作用域最小化"原则,将变量定义在尽可能小的作用域内,有助于提高代码的可读性和安全性。

总结

  • 变量分为基本类型和引用类型

    • 基本类型包括整型、浮点型、字符型和布尔型
    • 变量可以重新赋值和相互赋值
    • 常量使用final关键字定义,初始化后不可修改
    • Java 10引入var关键字可简化变量定义
  • 留意Long整型、不同进制整型的创建方式
  • 留意float浮点型的创建方式,科学计数法
  • 留意字符类型的创建使用单引号
  • 了解布尔类型所占字节数的规则

Java程序基础——1.变量与数据类型的更多相关文章

  1. Java编程基础——常量变量和数据类型

    Java编程基础——常量变量和数据类型 摘要:本文介绍了Java编程语言的常量变量和数据类型. 常量变量 常量的定义 一块内存中的数据存储空间,里面的数据不可以更改. 变量的定义 一块内存中的数据存储 ...

  2. 廖雪峰Java1-2Java程序基础-2变量和数据类型

    1.变量 变量是可以持有某个基本类型的数值,或者指向某个对象. 变量必须先定义后使用 定义: 变量类型 变量名 = 初始值; 2.java基本数据类型 整数类型:long int short byte ...

  3. Java基础-4变量与数据类型

    变量:变量是Java程序中的一个基本存储单元.变量是一个标识符.类型及一个可选初始值的组合定义.所有的变量都有一个作用域,即变量在某一区域有效. 基本的变量声明方式如下: int a; float b ...

  4. Java学习第一篇:变量,数据类型,运算符,流程控制(简介)

    一.安装和配置jdk 1.jdk是什么? (1).jdk全称是Java Development Kit, Java开发工具包; (2).jdk是sun公司开发的; (3).jdk主要包括:jre(Ja ...

  5. Python入门基础之变量和数据类型

    在Python中,能够直接处理的数据类型有以下几种: 一.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-80 ...

  6. Java入门基础(变量、操作符与表达式)

    Java入门基础 1. 第一个程序 2.变量(命名.运算.整数/小数/字符串.布尔类型) 3.操作符与表达式(算术/逻辑/关系/赋值/自增/类型转换操作符) HelloWorld! public cl ...

  7. 浅谈Java和JavaScript中变量和数据类型的区别

    对于一门编程语言的学习,如果第一步是安装环境,那么第二步一定是学习这门语言的基本规则,变量和数据类型则首当其冲 JavaScipt作为一个蹭Java热度而命名的语言,在很多方面和Java也有一定的相似 ...

  8. java程序给short变量赋0xff报异常

    在java程序中以二进制或十六进制表示的数比如0x01默认类型为int.所以付给short类型时要强制类型转换. short q = (short) 0b1111111111111111; Syste ...

  9. 使用.bat来执行Java程序基础

    将java程序做成可运行的jar后,又希望使用.bat文件来调用jar时,有几点需要注意的. 1.设置path和classpath .bat文件中扥的内容如下: @echo off set MY_HO ...

  10. Java学习笔记之——变量与数据类型、运算符

    一.变量 1.变量:变化的值 变量在代码运行期间,开辟了一块空间 .这块空间是有地址的,给这块取了个名字, 这个名字就叫做变量名,这块空间放的东西叫做变量值 2.变量的初始化: (1)先声明再赋值: ...

随机推荐

  1. odoo14里面附件传输接口

    @http.route('/fmcg/download/pdf', type='http', auth="public", csrf=False, cors='*') def up ...

  2. fabric peer节点账本验证器相关代码解读

    账本验证器相关代码 fabric/core/commiter/txvalidator/v20/validator.go // Semaphore provides to the validator m ...

  3. 「Log」2023.8.18 小记

    序幕 七点到校,博客整理一下,补全目录. 写 AC 自动机练习题. \(\color{blueviolet}{P3966\ [TJOI2013]\ 单词}\) 挺板的,每个模式串当匹配串统计一遍答案即 ...

  4. ChatMoney让你变成HR高手!

    本文由 ChatMoney团队出品 在快节奏的现代职场中,招聘是每一个企业都绕不开的重要环节.然而,传统的招聘流程往往繁琐而低效,从海量简历的筛选,再到后续的评估与决策,每一个环节都耗费着HR人员大量 ...

  5. 数栈优化案例:物流客户Elasticsearch集群性能优化

    一.客户背景 客户使用ES来进行数据存储.快速查询业务订单记录,但是经常会出现业务高峰期ES集群的cpu负载.内存使用均较高,查询延迟大,导致前端业务访问出现大量超时的情况,极大影响其客户使用体验. ...

  6. 4-torchvision数据集使用

    1. torchvision数据集介绍 ① torchvision中有很多数据集,当我们写代码时指定相应的数据集指定一些参数,它就可以自行下载. ② CIFAR-10数据集包含60000张32×32的 ...

  7. [2025.5.11 鲜花/rain] 非适应性白日梦

    [2025.5.11 鲜花/rain] 非适应性白日梦 感觉人类太可悲了,连一些动物最基本的本能反应都不被允许 猫的应激反应是被允许的,人类的就是不被允许的,甚至 应激这一词的定义,对大部分人来说,都 ...

  8. 理解PHP array_reduce函数

    http://blog.tanteng.me/2015/07/php-array-reduce/

  9. mac的Open V屁N Connect

  10. Atcoders [ARC133B] Dividing Subsequence 题解

    AT_arc133_b [ARC133B] Dividing Subsequence 模拟赛原题,来写篇题解. 只考虑匹配的状态,根据调和级数的数学知识,匹配的状态数不多,为 \(O(n\log n) ...