数据类型和变量

1.数据类型

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

基本数据类型有四类八种: 1. 四类:整型、浮点型、字符型以及布尔型

2.八种:

 整形是分为如上四种 byte short int  long

 浮点型分为 float 和double 

其中需要特别注意的是  byte内存占用为1字节   char内存占用为2字节。和我们之前c语言中学到的很不一样。

需要注意的点 

1.不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节。其他数据类型也同理(可以说这不像c语言一样,其java是可移植的,无论在哪个系统,其数据类型所占字节都是固定的

2.在java中整形和浮点型都是有符号的,不存在无符号。(跟c的区别,c有无符号和有符号之分,更加复杂)

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

4字符串属于引用类型,该中类型后序介绍。  

2.变量 

对于java来说 ,其为了安全性 ,变量在使用前是需要定义好值的,否则如果没定义好值就使用会导致编译期间报错。(这在c语言里是不可能的,C语言就算变量未定义也是可以使用的)

 对于给变量赋值,其值一定不要超出其变量取值范围

1.整形 

特殊说明:在整形中,长整型变量(long)的初始值后要加L或者l,推荐加L。 (其他整形变量都没这个要求)

2.浮点型

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

跟c语言一样。在 Java 中, int 除以 int 的值仍然是 int(会直接舍弃小数部分),。如果想得到 0.5, 需要使用 double 类型计算.  

double a = 1.0;
double b = 2.0;
System.out.println(a / b);   // 输出0.5

 

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

所以会出现以下代码,就是精度损失的一个很好的例子。

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

因为java更注重安全性,所以对于将float初始化,需要将其浮点型常量后面加个f或者F,否则会报错(c语言并不会报错)

float num = 1.0f;    // 写作 1.0F 也可以

由于float表示的数据精度范围较小, 一般在工程上用到浮点数都优先考虑 double, 不太推荐使用 float. 

3.字符型 

 Java 中使用 单引号 + 单个字母 的形式表示字符。

无论是哪种语言,计算机中的字符本质上都是属于整数. 在 C 语言中使用 ASCII 表示字符, 而 Java中我们使用Unicode表示字符.

unicode中一个字符占用两个字节,所以可以表示的字符种类更多, 包括中文.

char ch = '呵';
System.out.println(ch);

4.布尔类型 

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

Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.(强制转换双方都不能进行)

(c语言中bool能与int类型相互转换,所以0能隐式转换为true,其他数字能隐式转换为false,)

Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令 

 3.类型转换

 Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有较严格的校验.而跟c语言对比来说,c语言的类型转换规则就显得很宽松,很容易就能类型转换。

自动类型转换(隐式)

 自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数据范围大的时才会自动转换。(特殊情况不遵循,如下)

(c语言的隐式转换更简单,无论是小转换为大还是大转换为小都可以)

当给变量赋常量值时,其隐式转换并不符合上述所说,它的隐式转换有自己的规矩,其规则我们在上面已经说过了,再说一遍。

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

byte,short只要填整数常量就行,它会自动隐式整换。int填整数常量。 long需要整数常量后加个L如101L.   float在赋值时需要后面加个f如1.14f 。double只要正常浮点数就行.

 强制类型转换(显式)

c语言已经讲的很清楚,这里不详细展示 

强制类型转换不一定能成功,不相干的类型依旧不能互相转换 ,如在java中boolean和int之间不能强制转换(c语言当然可以)

4.类型提升 

如果参与计算的都是低于等于4字节大小的数据类型,就会将其提升到四字节类型再计算。原因是由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于 4 个字节的类型, 会先提升成 int, 再参与计算.  

如果有大于4个字节类型的数据参与计算,如long,则就全隐式转换为long类型再计算。

下面给几个例子

 

所以这就是java的类型提升。

其实对于类型转换和类型提升这两个概念在c语言就讲过了,只不过java跟c语言在这两方面上还是有差别的,所以要重新讲。

5.字符串类型 

 这是c语言所没有的类型,但是c语言有指针可以代替它。

字符串类型不属于java的基本类型,属于引用数据类型。

 在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进行拼接
}

 在java中,字符串跟c语言中字符串不一样,这里结尾并不存在隐藏的\0,所以在从底层来说可以将字符串认为是数组。

 在java中字符串可以被+拼接 ,如“hello”+4=“hello4” ,10+20+“hello”=“30hello”,“hello”+10+20=“hello1020”.

 

 对于其转换方法运用了包装类型和String,该知识点比较深,就不细展开了,看一下了解下就可以了。

 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java EE】线程安全的集合类

目录 🌴多线程环境使用 ArrayList🎍多线程环境使⽤队列🍀多线程环境使⽤哈希表🌸 Hashtable🌸ConcurrentHashMap ⭕相关面试题🔥其他常⻅问题 原来的集合类, 大部分都不是线程安全的. Vector, Stack, HashT…

Java---文件,流✨❤️

文章目录 1.遍历文件夹2.遍历子文件夹3.练习流4.以字节流的形式读取文件内容5.以字节流的形式向文件写入数据顶折纠问6 .写入数据到文件 1.遍历文件夹 一般说来操作系统都会安装在C盘,所以会有一个 C:\WINDOWS目录。 遍历这个目录下所有的文件(不用遍历子目录) 找出…

全栈入门,前后端入门--springboot3+vue3制作一个后台管理项目

一:前言 1:因为本人也是全栈初学者,现在主职是公司前端,鉴于当前行业形式,单单只掌握一门语言已经不再吃香,甚至有点危险,35岁危机极大可能提前。作为00后要始终保持危机意识,不至于…

[C++]使用纯opencv去部署yolov9的onnx模型

【介绍】 部署 YOLOv9 ONNX 模型在 OpenCV 的 C 环境中涉及一系列步骤。以下是一个简化的部署方案概述,以及相关的文案。 部署方案概述: 模型准备:首先,你需要确保你有 YOLOv9 的 ONNX 模型文件。这个文件包含了模型的结构和权…

opencv生成一张图片

opencv也可以创造出一张照片&#xff0c;下面就是创造一张照片&#xff0c;并存放到项目文件夹下的示例 #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> #include <vector> using namespace cv…

sql注入之sqli-labs-less-2 数值型报错注入

输入?id1 进行试探,第二关数值型&#xff0c;没有字符串的单引号&#xff0c;所以输入单引号报错&#xff0c; 经试探?id1 order by 5 -- 如果是错误的数值&#xff0c;显示如下&#xff1a; 正确 的为&#xff1a; ?id1 order by 3 -- 进行注入查看回显点&#xff1a; …

个体工商户营业执照怎么在网上年检?

第一步PC端登录国家企业信用信息公示系统&#xff01; 第二步点企业信息填报&#xff01; 第三步选择省份&#xff01; 第四步登陆方式&#xff01; 第五步点左上角年度报告填写&#xff01; 第六步下滑浏览点确认&#xff01; 第七步按照实际情况填写&#xff01; 第八步…

Linux笔记--文件权限

一、相关概念 Linux最优秀的地方之一就在于多人多任务环境。为了让各个使用者有较为保密的文件数据&#xff0c;文件的权限管理尤为重要。 ●文件的可存取身份: owner:文件拥有者 group:文件所属用户组 others:其他人 ●文件权限: r: read&#xff0c;读 文件:是否能查看文件内…

代码随想录刷题笔记 DAY 41 | 整数拆分 No.343 | 不同的二叉搜索树 No.96

文章目录 Day 4101. 整数拆分&#xff08;No. 343&#xff09;<1> 题目<2> 笔记<3> 代码 02. 不同的二叉搜索树&#xff08;No. 96&#xff09;<1> 题目<2> 笔记<3> 代码 Day 41 01. 整数拆分&#xff08;No. 343&#xff09; 题目链接 …

2024.3.1 小项目

1、机械臂 #include <myhead.h> #define SER_IP "192.168.125.32" //服务器端IP #define SER_PORT 8888 //服务器端端口号#define CLI_IP "192.168.68.148" //客户端IP #define CLI_PORT 9999 /…

Mybatis plus扩展功能-Db静态工具

目录 1 前言 2 使用方法 2.1 Db静态工具拥有的部分方法 2.2 举例 1 前言 在我们的服务层中&#xff0c;有时为了实现一个方法需要引入其它的Mapper层方法&#xff0c;但是&#xff0c;这样可能出现循环依赖。虽然Spring已经给我们解决了简单的循环依赖问题&#xff0c;但是…

【书生·浦语大模型实战营】第4节 课后作业

XTuner 大模型单卡低成本微调实战 0. 课程链接1. 课后作业1.2 进阶作业 0. 课程链接 课程链接&#xff1a;https://github.com/InternLM/tutorial/blob/main/xtuner/README.md 1. 课后作业 构建数据集&#xff0c;使用 XTuner 微调 InternLM-Chat-7B 模型, 让模型学习到它是你…

数字化转型导师坚鹏:证券公司数字化思维升级之道

证券公司数字化思维升级之道 ——数字化思维之六脉神剑 课程背景&#xff1a; 很多证券公司存在以下问题&#xff1a; 不知道数字化转型如何改变思维模式&#xff1f; 不清楚需要建立什么样的数字化思维&#xff1f; 不知道如何开展数字化思维提升工作&#xff1f; 课…

Redis小白入门教程

Redis入门教程 1. Redis入门1.1 Redis简介1.2 Redis服务启动与停止1.2.1 Redis下载1.2.2 服务启动命令1.2.3 客户端连接命令1.2.4 修改Redis配置文件 2. Redis数据类型2.1 五种常用数据类型介绍2.1.1 字符串操作命令2.1.2 哈希操作命令2.1.3 列表操作命令2.1.4 集合操作命令2.1…

JWT的原理与隐患

什么是JWT JWT通常由三部分组成&#xff1a;头信息&#xff08;header&#xff09;, 消息体&#xff08;payload&#xff09;和签名&#xff08;signature&#xff09;。 头信息指定了该JWT使用的签名算法 header {"alg":"HS256","typ":"…

9.8分割等和子集(LC416-M)

算法&#xff1a; 可以转换为背包问题&#xff1a; 一个商品如果可以重复多次放入是完全背包&#xff0c;而只能放入一次是01背包&#xff0c;写法还是不一样的。 要明确本题中我们要使用的是01背包&#xff0c;因为元素我们只能用一次。 只有确定了如下四点&#xff0c;才能…

C++_程序流程结构_循环结构_while

while循环结构 作用 满足循环条件&#xff0c;执行循环语句 语法 while (循环条件&#xff09;{循环语句}解释 只要循环条件的结果为真&#xff0c;就执行循环语句 流程图 示例 注意 在执行循环语句时候&#xff0c;程序必须提供跳出循环的出口&#xff0c;否则出现死循…

B083-SpringCloud-eureka ribbon feign hystrix

目录 eureka基础项目准备注册中心的搭建生产者注册到eureka消费者注册到eureka并通过eureka调用生产者eureka集群 服务提供者集群集群以后消费者调用服务的问题ribbon消费者使用ribbon负载均衡赋值负载均衡策略负载均衡优化 feignHystrixHystrix概述Ribbon搭配Hystrix降级处理F…

springboot+vue学生信息管理系统学籍 成绩 选课 奖惩,奖学金缴费idea maven mysql

技术栈 ide工具&#xff1a;IDEA 或者eclipse 编程语言: java 数据库: mysql5.7 框架&#xff1a;ssmspringboot都有 前端&#xff1a;vue.jsElementUI 详细技术&#xff1a;springbootSSMvueMYSQLMAVEN 数据库工具&#xff1a;Navicat/SQLyog都可以学生信息管理系统主要实现角…

★【递归】【链表】Leetcode 21. 合并两个有序链表

★【递归】【链表】Leetcode 21. 合并两个有序链表 解法1 &#xff1a;递归链表 简直是好题啊好题多做做 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- 解法1 &#xff1a;递归链表 简直是好题啊好题多做做 >>>…