Java入门系列-05-数据类型和类型转换

简介: 这篇文章为你搞懂2个问题java 中有哪些数据类型可以用存储数据?java 中的数据类型是怎么转换的?在上一篇文章中我们学会了如何使用变量,像这样存储一个整数 int age=10;,可以在开发工具中编写一行这样的代码 int age=10.5; 就会发现开发工具报错了,是因为变量中的数据类型也是不能随便用的。

这篇文章为你搞懂2个问题

  1. java 中有哪些数据类型可以用存储数据?
  2. java 中的数据类型是怎么转换的?

在上一篇文章中我们学会了如何使用变量,像这样存储一个整数 int age=10;,可以在开发工具中编写一行这样的代码 int age=10.5; 就会发现开发工具报错了,是因为变量中的数据类型也是不能随便用的。

数据类型

咱们先来看下面一组数据

如果每天花费2小时在交通上
1月=60小时=2.5天,
1年=730小时=30天,
50年=36500小时=1520天=4年

这段数据中可以分为以下2类,java中也包含这2大类

  1. 数值
    1月 中的 1
    60小时 中的 60
    2.5 天中 2.5
  2. 非数值
    ,
    小时
  • 数值
    • 整型
    • byte
    • short
    • int
    • long
    • 浮点型
    • float
    • double
  • 非数值
    • char
    • boolean
    • String

      数值型

      下面看一下每个数据类型的详细介绍

数据类型 大小 取值范围 介绍
byte 1字节8位 -128 ~ +127 字节型 这个范围可以存储普通人的年龄
short 2字节16位 -32768~+3276 短整型
int 4字节32位 -2147483648)~+2147483647 整型 存下中国人口的数量没有问题,但是存下地球所有人的数量就不够了
long 8字节64位 -2^63 ~ + 2^63-1 长整型 存下地球的人数绰绰有余
float 4字节32位 单精度浮点数 存储小数
double 8字节64位 双精度浮点数

敲一敲:

public class DemoType {
    public static void main(String[] args) {
        //int类型使用
        int numa=10+1;
        System.out.println(numa);//输出11
        short numb=20;
        //使用long类型时的值需要使用L作为后缀
        long time=9223372036854775807L;
    }
}

在使用 long 类型时使用不区分大小写的 L 作为后缀标记与整型进行区分
使用其他整数时不需加后缀符号,注意赋值的整数不超过类型范围即可

敲一敲:

public class DemoFloat {
    public static void main(String[] args) {
        float money=33.6f;
        double length=55.07;
    }
}

在使用单精度浮点数时需加上 f 作为后缀,这是因为任何小数都会被认为是 double
在日常使用中建议使用 double 类型防止精度的丢失

非数值型

字符型 char

只能存储一个字符,值需要用一对单引号引起来,且单引号中只能放一个字符

敲一敲:

char sex='男';

字符串型 String

用于存储一串字符,必须用一对双引号引起来,另外需要注意的是 String 不是基本数据类型,而是 java 中的另一个概念

敲一敲:

String username="极客大全";
String question="What's your name?\nHow old are you?";
  1. String 类型用于存储字符串,字符串可以拼接但不能用于数学运算
  2. 还可以使用一些 转义字符 ,这些字符可以用来表示一些特殊符号像 空格、换行
    \n 可以用来表示换行,之后的内容会另起一行
    \t 可以表示一个制表符(Tab 键)

布尔型 boolean

用于存储逻辑的结果,如:大象比人大的结果是真(true) 人比蚂蚁小的结果是假(false)

敲一敲:

boolean isbig=(1>10);
System.out.println("isbig:"+isbig);
boolean isequal=(100==3);
System.out.println("isequal:"+isbig);
boolean flag=false;
System.out.println("flag:"+flag);

boolean 类型的变量只能存储两个值 truefalse
还可以将逻辑比较后的结果(也是 truefalse)存入

数据类型转换

隐式类型转换

二花一个月前称的体重为97.5斤,现在比一个月前刚好增加2斤,二花现在是多少斤?这是一个比较简单的数学问题,正确结果是 99.5 斤,下面我们用代码来模拟一遍。

敲一敲:

public class DemoClac {
    public static void main(String[] args) {
        double weight=97.5;//一个月前的体重
        int add=2;//增加的体重
        double sum=weight+add;
        System.out.println(sum);//输出和
    }
}

add 变量是一个整数类型,而 weight 是一个小数,两者在相加后转成了 double类型
这时发生的就是 隐式类型转换

隐式类型转换 就是自动类型转换,满足以下两个规则即可发生

  1. 如果一个操作数为double类型,则整个表达式可提升为double类型

像上面的这个示例就是满足这个规则

  1. 满足自动类型转换的条件:两种类型要兼容、目标类型大于源类型

例子1 :double a=1; 1属于整型,double 类型大于整型,即自动转换

例子2 :

char chr=97;
System.out.println(chr);//输出字符 a

char 类型兼容 int 类型,每个整数存入char类型变量时都会映射一个字符,更多可以百度 ASCII

强制类型转换

敲一敲:

int sum=55.3+22;
System.out.println(sum);

我们想要一个整数的和,但上面的这段代码运行时会报错:cannot convert from double to int

这是为什么呢?根据前面学到的隐式类型转换,当表达式中有操作数为 double类型时,整个表达式提升为 double,必须进行显式强制类型转换。

敲一敲:

int sum=(int) (55.3+22);
System.out.println(sum);

这次的运行成功,运行的结果为 77

强制类型转换往往是从宽度大的类型转换为宽度小的类型,会使数值损失精度

试一试

  1. 下面运算的结果是多少?为什么?
int a=5;
int b=2;
int c=a/5;
System.out.println(c);
  1. 上一个练习中的代码如何让运算结果更精准?
  2. 下面素材中生成随机小数,修改素材生成 1-10 的随机整数
    public class DemoRandom {
    public static void main(String[] args) {
        double random=Math.random();
        System.out.println(random);
    }
    }

    搜索关注公众号「享智同行」,第一时间获取技术干货

相关文章
|
6天前
|
存储 缓存 安全
Java中的数据类型
Java语言提供了八种基本类型,分为4类8种:六个数值型(四个整数型byte、short、int、long,两个浮点型float、double)、一个字符型char和一个布尔型boolean。每种基本类型有固定的位数、取值范围及默认值。此外,还存在`void`类型,但无法直接操作。基本类型支持隐式和显式类型转换,并有对应的包装类如`Integer`、`Double`等,用于在需要对象的场景中使用。包装类支持自动装箱与拆箱机制,简化了基本类型与引用类型的转换,但需要注意性能和空指针异常等问题。
Java中的数据类型
|
21天前
|
前端开发 JavaScript Java
java常用数据判空、比较和类型转换
本文介绍了Java开发中常见的数据处理技巧,包括数据判空、数据比较和类型转换。详细讲解了字符串、Integer、对象、List、Map、Set及数组的判空方法,推荐使用工具类如StringUtils、Objects等。同时,讨论了基本数据类型与引用数据类型的比较方法,以及自动类型转换和强制类型转换的规则。最后,提供了数值类型与字符串互相转换的具体示例。
|
26天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
48 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
22天前
|
监控 架构师 Java
Java虚拟机调优的艺术:从入门到精通####
本文作为一篇深入浅出的技术指南,旨在为Java开发者揭示JVM调优的神秘面纱,通过剖析其背后的原理、分享实战经验与最佳实践,引领读者踏上从调优新手到高手的进阶之路。不同于传统的摘要概述,本文将以一场虚拟的对话形式,模拟一位经验丰富的架构师向初学者传授JVM调优的心法,激发学习兴趣,同时概括性地介绍文章将探讨的核心议题——性能监控、垃圾回收优化、内存管理及常见问题解决策略。 ####
|
1月前
|
Java
Java基础之数据类型
Java基础之数据类型
20 6
|
1月前
|
Java
在Java中如何将基本数据类型转换为String
在Java中,可使用多种方法将基本数据类型(如int、char等)转换为String:1. 使用String.valueOf()方法;2. 利用+运算符与空字符串连接;3. 对于数字类型,也可使用Integer.toString()等特定类型的方法。这些方法简单高效,适用于不同场景。
58 7
|
1月前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
|
1月前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
42 1
|
1月前
|
Java 程序员 数据库连接
Java中的异常处理:从入门到精通
在Java编程的海洋中,异常处理是一艘不可或缺的救生艇。它不仅保护你的代码免受错误数据的侵袭,还能确保用户体验的平稳航行。本文将带你领略异常处理的风浪,让你学会如何在Java中捕捉、处理和预防异常,从而成为一名真正的Java航海家。
|
2天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者