java变量、数据类型和运算符-3

简介: 事实上,自动类型转换并非所有情况下都有效。如果不满足上述条件,当必须将double类型变量的值赋给一个int类型变量时,该如何进行转换呢?这时系统就不会完成自动类型转换了。

2)强制数据类型转换


事实上,自动类型转换并非所有情况下都有效。如果不满足上述条件,当必须将double类型变量的值赋给一个int类型变量时,该如何进行转换呢?这时系统就不会完成自动类型转换了。


问题:去年Apple笔记本所占的市场份额是20%,今年增长的市场份额是9.8%,求今年所占的份额?


分析:不难发现计算的方法并不难,原有市场份额加上增长的市场份额便是现在所占的市场份额。因此,可以声明一个int类型变量before来存储去年的市场份额,一个double类型变量rise来存储增长的部分。但是如果直接将这两个变量的值相加,然后将计算结果直接赋给一个int类型变量now会提示出现问题吗?尝试后会发现IDEA会提示 “类型不匹配” 的错误信息。


示例5


代码:


package cn.dbit.demo;


public class TypeChange {
    public static void main(String[] args) {
        int before = 20;
        double rise = 9.8;
        int now = before + (int)rise;
        System.out.println("新的市场份额是:" + now);
    }
}


分析:


package cn.dbit.demo;

public class TypeChange {
    public static void main(String[] args) {
        int before = 20;           //Apple 笔记本市场份额
        double rise = 9.8;         //增长的份额
//计算新的市场份额 (double 类型变量强制转化成 int 类型变量)
        int now = before + (int)rise;     //现在的份额
        System.out.println("新的市场份额是:" + now);
    }
}


示例5给出了解决方案,示例5的运行结果如下。


新的市场份额是: 29


根据类型提升规则,表达式(before + rise)的值应该是double类型,但是最后的结果却要转变成int类型,赋给int类型变量now。由于不能进行放大转换,因此必须进行显式地强制类型转换。


语法:


 


(数据类型)表达式


在变量前加上括号,括号中的类型就是要强制转换成的类型。例如:


double d = 34.5634;

int b = (int)d;


运行后b的值如下:


34


从示例中可以看出.,由于强制类型转换往往是从宽度大的类型转换成宽度小的类型,使数值损失了精度(如2.3变成了 2,34.5634变成了 34),因此可以形象地称这种转换为 "缩小转换"。


小结:数据类型转换的形式分为自动数据类型转换和强制数据类型转换两种。


2.2.4 boolean 类型


前面已经学习了一些数据类型,有表示数字的,有表示字符的,……。但是事物往往还有真假之分,如在判断一件艺术品的时候常说:"这是真的" 或 "这是假的"。另外,也会经常做一些这样的判断,如 "地铁2号线的首发车时间是5:00吗?"、"这次考试成绩在90分之上吗?"、"健身俱乐部的年费低于1000元吗?"等,这些问题都需要经过判断。但答案只能有两个,要么"是"(即真)要么"否"(即假)。程序也一样,有时也需要判断真假。这时就需要一种数据类型,专门用来表示真和假。Java中使用boolean类型表示真假。"boolean" 又称 "布尔",所以我们常说 "布尔类型"。boolean是Java的关键字,所有字母为小写。


表示真假可以用boolean类型,那么怎么表示呢?其实boolean类型有两个值,而且只有这两个值。boolean类型的值如表2-5所示。


表2-5 boolean类型的值


image.png


2.2.5 关系运算符


现在知道了程序用boolean数据类型表示真和假,但是程序如何知道真假呢?程序可以通过比较大小、长短、多少等得知其真假。Java提供了一种可以比较大小、长短、多少等的运算符,这就是关系运算符。表2-6列出了 Java语言中提供的关系运算符。


表 2-6 关系运算符



image.png


从表2-6可以看出,关系运算符是用来做比较运算的,而比较的结果是一个boolean类型的值,要么是真(true),要么是假 (false)。


问题:从控制台输入张三同学的成绩,与李四的成绩( 80分)进行比较,然后输出“张三成绩比李四的成绩高吗? ”这句话的判断结果。


分析:程序要实现的功能可以分为以下两部分。


(1) 实现从键盘获取数据。


(2) 比较数据,并输出比较结果。


示例6


代码:

package cn.dbit.demo;
import java.util.Scanner;
public class BoolTest {
    public static void main(String[] args) {
        int liSi = 80;
        boolean isBig;
        Scanner input = new Scanner(System.in);
        System.out.print("输入学员张三成绩:");
        int zhangSan = input.nextInt();
        isBig = zhangSan > liSi;
        System.out.println("张三成绩比李四高吗?" + isBig);
    }
}


分析:

package cn.dbit.demo;
import java.util.Scanner;
public class BoolTest {
    public static void main(String[] args) {
        int liSi = 80;           //学员李四的成绩
        boolean isBig;           //声明一个 boolean 类型的变量
        Scanner input = new Scanner(System.in);    //Java  输入的一种方法
        System.out.print("输入学员张三成绩:");        //提示要输入学员张三的成绩
        int zhangSan = input.nextInt();          //输入张三的成绩
        isBig = zhangSan > liSi;           //将比较结果保存在 boolean 变量中
        System.out.println("张三成绩比李四高吗?" + isBig);      //输出比较结果
    }
}


程序运行结果如图2.7所示。


图2.7示例6的运行结果


由示例6可见,和所有其他数据类型一样,在使用boolean类型之前,也需要先进行声明和赋值,如下所示。


boolean isBig;


isBig = zhangSan > liSi;


比较结果是一个boolean类型的值,结果为"假",因此示例6的输出结果为false。


注意:”=” 和 “==” 的区别。


(1) “=” 是赋值运算符,即把右边的值赋给 “=” 左边的变量,如int num = 20。


(2) “==” 是比较运算符,即 “左边的值与 “==” 右边的值比较,看它们是否相等,如果相等则为true, 否则为false,如3==4的结果为false。


小结:


(1)到现在为止,已经学过的数据类型和运算符有哪些?自己在纸上写一下,记不起来时可以翻看前面的内容,这些数据类型和运算符在后面的学习中会经常用到。


(2)运算符的优先级:算术运算符>关系运算符>逻辑运算符,即在一个表达式中,算术运算符的优先级最高,关系运算符次之,然后是逻辑运算符。逻辑运算符将在下一章进行学习。如果在一个表达式中包含赋值运算符,则它的优先级最低。当运算符比较多时,可以使用小括号改变某个运算符的执行顺序。


2.3 技能训练


上机练习1


指导——升级“我行我素购物管理系统”,实现购物结算功能


训练要点


运算符(*、=)的使用。

从控制台输出信息。

需求说明


张三的购物清单如表2-7所示。


image.png

相关文章
|
1月前
|
存储 缓存 安全
除了变量,final还能修饰哪些Java元素
在Java中,final关键字不仅可以修饰变量,还可以用于修饰类、方法和参数。修饰类时,该类不能被继承;修饰方法时,方法不能被重写;修饰参数时,参数在方法体内不能被修改。
31 2
|
8天前
|
存储 缓存 安全
Java中的数据类型
Java语言提供了八种基本类型,分为4类8种:六个数值型(四个整数型byte、short、int、long,两个浮点型float、double)、一个字符型char和一个布尔型boolean。每种基本类型有固定的位数、取值范围及默认值。此外,还存在`void`类型,但无法直接操作。基本类型支持隐式和显式类型转换,并有对应的包装类如`Integer`、`Double`等,用于在需要对象的场景中使用。包装类支持自动装箱与拆箱机制,简化了基本类型与引用类型的转换,但需要注意性能和空指针异常等问题。
Java中的数据类型
|
2月前
|
Java 编译器
java“变量 x 可能未被初始化”解决
在Java中,如果编译器检测到变量可能在使用前未被初始化,会报“变量 x 可能未被初始化”的错误。解决方法包括:1. 在声明变量时直接初始化;2. 确保所有可能的执行路径都能对变量进行初始化。
283 2
|
1月前
|
Java 编译器
Java重复定义变量详解
这段对话讨论了Java中变量作用域和重复定义的问题。学生提问为何不能重复定义变量导致编译错误,老师通过多个示例解释了编译器如何区分不同作用域内的变量,包括局部变量、成员变量和静态变量,并说明了使用`this`关键字和类名来区分变量的方法。最终,学生理解了编译器在逻辑层面检查变量定义的问题。
Java重复定义变量详解
|
1月前
|
Java
Java基础之数据类型
Java基础之数据类型
20 6
|
1月前
|
Java
在Java中如何将基本数据类型转换为String
在Java中,可使用多种方法将基本数据类型(如int、char等)转换为String:1. 使用String.valueOf()方法;2. 利用+运算符与空字符串连接;3. 对于数字类型,也可使用Integer.toString()等特定类型的方法。这些方法简单高效,适用于不同场景。
60 7
|
1月前
|
Java 程序员 容器
Java中的变量和常量:数据的‘小盒子’和‘铁盒子’有啥不一样?
在Java中,变量是一个可以随时改变的数据容器,类似于一个可以反复打开的小盒子。定义变量时需指定数据类型和名称。例如:`int age = 25;` 表示定义一个整数类型的变量 `age`,初始值为25。 常量则是不可改变的数据容器,类似于一个锁死的铁盒子,定义时使用 `final` 关键字。例如:`final int MAX_SPEED = 120;` 表示定义一个名为 `MAX_SPEED` 的常量,值为120,且不能修改。 变量和常量的主要区别在于变量的数据可以随时修改,而常量的数据一旦确定就不能改变。常量主要用于防止意外修改、提高代码可读性和便于维护。
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
73 4
|
1月前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
42 1
|
2月前
|
算法 Java 测试技术
🌟Java 零基础 | 详解 单目运算符
【10月更文挑战第14天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
58 7