第二课:数据类型与变量

news2024/11/17 17:27:24

一. 数据类型

整型     byte  short  int  long

小数     float  double

字符     char

布尔     boolean

1.不论在16位,32位还是64位系统,int都占用4个字节,long都占用8个字节

 👆可移植性,可以跨平台运行,“一次编译,到处运行”

2.在Java中,整型和浮点型都是带有符号的

以字节型来举例:一个字节8个bit位,第一个bit位是符号位,不计入数值

所以一共有7个bit位是数值位

所以范围是-2^7~2^7-1  -128~127

3.整型默认int型,浮点数类型默认为double类型

4.引用数据类型 String  数组  类  接口

二.变量

1.语法格式

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

Java当中局部变量在使用的时候必须初始化

public class Test {
    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);
    }
}

2.整型变量

注意:

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

2.int的包装类型是Integer

 注意:包装类型只针对基本数据类型,String不是包装类型

3.给变量设置初始值(字面值常量)时,注意不要超过int的范围

//int类型的范围
public class Test {
    public static void main(String[] args) {
        System.out.println(Integer.MIN_VALUE);//-2147483648
        System.out.println(Integer.MAX_VALUE);//2147483647
    }
}

3.长整型变量

long a = 10L;
System.out.println(a);
System.out.println(Long.MAX_VALUE);//9223372036854775807
System.out.println(Long.MIN_VALUE);//-9223372036854775808

1.长整型初始值后面加L(推荐,为了区分int和long两个类型)

2.long包装类型是Long

3.任何系统都是8个字节

4.短整型变量

System.out.println(Short.MIN_VALUE);//-32768
System.out.println(Short.MAX_VALUE);//32767

注意:对于byte,short这类小于4个字节的赋值的字面值,没有超过最大范围的时候,不会被解析为整型 

5.字节型变量

System.out.println(Byte.MIN_VALUE);//-128
System.out.println(Byte.MAX_VALUE);//127

为什么127+1 = -128呢

因为把加之后的数据存到不能存128这么大的变量里面,所以数据溢出

回归这个经典的图

 

6.浮点型变量

1.除法

在Java中,int除以int的值仍然是int(会直接舍弃小数部分),要得到0.5需要使用double类型计算

 

 2.乘法

double num = 1.1;
System.out.println(num * num); // 输出1.21吗?
// 执行结果
1.2100000000000002

 浮点数没有一个非常精确的数字,没法精确到小数点后几位,只能是一个近似值

3.浮点数与整数在存储方式上有很大不同,不是单纯用2^n来存就行

分为符号位,指数位,尾数(参考 不能错过的数据在内存中的存储剖析)

 4.单精度浮点类型

float f = 12.5f;//加这个f把8个字节转换成4个字节

7.字符类型变量

1. Java 中使用 单引号 + 单个字母 的形式表示字符字面值 .
char ch = '呵';
System.out.println(ch);
2. 计算机中的字符本质上是一个整数 . C 语言中使用 ASCII 表示字符 , Java 中使用 Unicode 表示字符 . 因此 一个字符占用两个字节, 表示的字符种类更多 , 包括中文(因为一个汉字占两个字节)
执行 javac 的时候可能出现以下错误 :
Test.java:3: 错误: 未结束的字符文字
char ch = '鍛?';
^
此时我们在执行 javac 时加上 -encoding UTF-8 选项即可
javac -encoding UTF-8 Test.java

char的包装类型为Character



8.布尔型算法

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

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

boolean value = true;
System.out.println(value + 1);
// 代码编译会出现如下错误
Test.java:4: 错误: 二元运算符 '+' 的操作数类型错误
System.out.println(value + 1);
^
第一个类型: boolean
第二个类型: int
1 个错误

三.类型转换

int a = 10;
long b = 100L;
b = a; // 可以通过编译
a = b; // 编译失败

不同类型的变量相互赋值需要进行类型转换

1.自动类型转换

程序自动转换

float f = 3.14F;
double d = 5.12;
d = f; // 编译器会将f转换为double,然后进行赋值
f = d; // double表示数据范围大,直接将float交给double会有数据丢失,不安全

2.强制性类型转换

float f = 3.14F;
double d = 5.12;
d = f; // float-->double,数据范围由小到大,隐式转换
f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败

后果:可能会丢失数据,会产生意想不到的问题

3.类型提升

不同类型数据进行计算时,范围小的类型会被提升为范围大的类型

int 和 long

int a = 10;
long b = 20;
int c = a + b; // 编译出错: a + b==》int + long--> long + long 赋值给int时会丢失数据
//int c = (int)(a+b) 可以这么改,但是会数据丢失
long d = a + b; // 编译成功:a + b==>int + long--->long + long 赋值给long

byte和byte

由于CPU通常按照4个字节为单位从内存中读写数据,低于4个字节的类型会先提升成int再计算

 a + b得到的结果会被类型提升,得到的是int类型,与前面的byte不符合,产生错误.

//修改1
int c = a + b;
//修改2
byte c = (byte) (a + b);

四.String

String str = "hello";
System.out.println(str);
System.out.println(str.length());//输出长度,5

 这个字符串以什么结尾?

答案:没有,这不是我们C语言所说的\0结尾,这个hello底层是一个数组

int和string类型转换

String str2 = "345";
int val = Integer.valueOf(str2);
//int val = Integer.parseInt(str2);
System.out.println(val+1);//346

int p = 100;
String str3 = String.valueOf(p);
System.out.println(str3);//100

 拼接符号

当一句话里面有出现字符串和+,这里的+一般是拼接作用

小测试

 

        System.out.println(a+b + "a + b ");//?
        System.out.println("a + b = "+a+b);//?

 

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

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

相关文章

【黑马头条之redis实现延迟任务】

本笔记内容为黑马头条项目的延迟任务精准发布文章部分 目录 一、实现思路 二、延迟任务服务实现 1、搭建heima-leadnews-schedule模块 2、数据库准备 3、安装redis 4、项目集成redis 5、添加任务 6、取消任务 7、消费任务 8、未来数据定时刷新 1.reids key值匹配 …

“智能算式批改系统”开发与部署优化

“智能算式批改系统”开发与部署优化 摘要 本次大作业搭建并实现了“智能算式批改系统”的开发与部署优化。“智能算式批改系统”是一款集yolo目标检测、paddleocr识别和四则运算判别算法的智能批改系统。该系统能够对上传包含四则运算题的页面进行批改,包括识别出…

【Docker】Docker安装Kibana服务

文章目录 1. 什么是Kibana2. Docker安装Kibana2.1. 前提2.2. 安装Kibana Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常见服务全套(质量有保证,内容详情) 1. 什么是Kibana Kibana 是一款适用于Elasticsearch的数据可视化和管…

PyTorch深度学习实战(7)——批大小对神经网络训练的影响

PyTorch深度学习实战(7)——批大小对神经网络性能的影响 0. 前言1. 批处理概念2. 批处理的优势3. 批大小对神经网络性能的影响3.1 批大小为 323.2 批大小为 30,000 小结系列链接 0. 前言 在神经网络中,批( batch )是指一次输入网络进行训练或…

微服务体系<2> ribbon

1. 什么是负载均衡 比如说像这样 一个请求打在了nginx上 基于nginx进行负载分流 这就是负载均衡但是负载均衡分 服务端负载均衡和客户端负载均衡 客户端负载均衡 我user 从注册中心拉取服务 拉取order列表,然后发起getOne()调用 这就是客户端负载均衡 特点就是我…

【echarts】用js与echarts数据图表化,折线图、折线图堆叠、柱状图、折柱混合、环形图

echarts 是一个基于 JavaScript 的开源可视化库,用于构建交互式和自定义的图表,使数据更加直观和易于理解,由百度开发并于2018年捐赠给 Apache 软件基金会,后来改名为Apache ECharts 类似的还有Chart.js Chart.js地址&#xff1…

从此告别涂硅脂 利民推出新款CPU固态导热硅脂片:一片26.9元

利民(Thermalright)近日推出了新款Heilos CPU固态导热硅脂片,其中Intel版为26.9元,AMD版售价29.9元。 以往向CPU上涂硅脂,需要先挤一粒绿豆大小的硅脂,然后用塑料片涂匀,操作和清理对新手都极不友好。 该固态导热硅脂片…

string【2】模拟实现string类

string模拟实现 引言(实现概述)string类方法实现默认成员函数构造函数拷贝构造赋值运算符重载析构函数 迭代器beginend 容量size、capacity、emptyreserveresize 访问元素operator[] 修改insert插入字符插入字符串 appendpush_backoperatoreraseclearswa…

Python web实战 | 使用 Flask 实现 Web Socket 聊天室

概要 今天我们学习如何使用 Python 实现 Web Socket,并实现一个实时聊天室的功能。本文的技术栈包括 Python、Flask、Socket.IO 和 HTML/CSS/JavaScript。 什么是 Web Socket? Web Socket 是一种在单个 TCP 连接上进行全双工通信的协议。它是 HTML5 中的…

SAMBA 文件分享相关 笔记

目标说明 在Linux 安装Samba,然后在Windows端映射为网络硬盘 流程 Linux 端命令 apt install samba -y 默认情况下软件会询问是否迁移系统网络设置以搭建协议,选择迁移即可修改配置文件 vim /etc/samba/smb.conf Samba 的配置文件中会带一个名为 prin…

【Mybatis】Mybatis架构简介

文章目录 1.整体架构图2. 基础支撑层2.1 类型转换模块2.2 日志模块2.3 反射工具模块2.4 Binding 模块2.5 数据源模块2.6缓存模块2.7 解析器模块2.8 事务管理模块 3. 核心处理层3.1 配置解析3.2 SQL 解析与 scripting 模块3.3 SQL 执行3.4 插件 4. 接口层 1.整体架构图 MyBatis…

第5集丨webpack 江湖 —— 项目发布 和 source map

目录 一、webpack项目发布1.1 新增发布(build)命令1.2 优化js和图片文件的存放路径1.3 执行1.4 效果 二、clean-webpack-plugin插件2.1 安装2.2 配置2.3 执行 三、source map3.1 配置3.2 生成的source map文件 四、定义符4.1 配置4.2 使用 五、工程附件汇总5.1 webpack.config.…

大麦订单一键生成 仿大麦订单生成

后台一键生成链接,独立后台管理 教程:修改数据库config/Conn 不会可以看源码里有教程 下载程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

强化学习(EfficientZero)(应用于图像和声音)

目录 摘要 1.背景介绍 2.MCTS(蒙特卡洛树搜索)(推理类模型,棋类效果应用好,控制好像也不错) 3.MUZERO 4.EfficientZero(基于MUZERO) 展望 参考文献 摘要 在文中,基于…

【雕爷学编程】MicroPython动手做(20)——掌控板之三轴加速度5

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…

数学建模 好文章和资源推荐

数学建模入门篇(0基础必看,全是自己的经验) 【竞赛|数学建模】Part 1:什么是数学建模和各模块介绍 0基础小白,如何入门数学建模? 数学建模入门篇(0基础必看,全是自己的经验) 什么是数学建模 重申了一下题目&#xff…

基于SpringBoot+Vue的地方废物回收机构管理系统设计与实现(源码+LW+部署文档等)

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

并发编程——线程池

1.概述 如果并发的线程过多,而且执行的时间都非常短,如果这样,每次都要创建线程就会大大降低效率,我们可以通过线程池来解决,JDK5增加了内置线程池ThreadPollExecutor。 2.线程池的优点 1.重复利用,降低…

【LeetCode】单链表——刷题

你曾经灼热的眼眶,是人生中少数的笨拙又可贵的时刻。 文章目录 1.反转单链表 题目思路及图解 代码中需要注意的问题 2.移除链表元素 题目思路及图解 代码中需要注意的问题 大家好,我是纪宁。 这篇文章分享给大家一些经典的单链表leetcode笔试题的…

【Unity 实用插件篇】 | 行为状态机StateMachine,规范化的管理对象行为

前言【Unity 实用插件篇】 | 行为状态机StateMachine 学习使用一、StateMachine行为状态机 介绍二、StateMachine 结构分析三、StateMachine状态机详细使用流程3.1 第一步:创建状态机Transition Table SO3.2 第二步:创建对应状态的 State SO3.3 第三步:创建状态的切换条件 C…