JAVA-初步认识-第二章-自动类型提升&强制类型转换

一. 深入理解变量

在之前的讲解中,我们谈论的都是定义不同类型的变量时要注意的问题。这一节中,我们将变量投入运算,探索在运算过程中,应该遵守的规则。

在这里对上一节《变量的基本演示》做一个小结,主要有三点。直接书写数字常量时,系统会给常量一个默认的类型,如int和double,当书写的常量赋值给定义好类型的变量时,就会产生错误。还有就是书写的常量和本身默认的类型起冲突。最后一点就是在书写源程序的过程中,一定要采用英文字符。

二. 变量的运算规则

运算的两端都是相同类型才可以,不然无法进行运算。

如果两端都是数值类型的话,虽然具体类型不一样,但是一样可以运算。原理是什么?前提一定是数值型,(为什么其他类型不行?其他类型之间根本无法进行算术运算。)两端数值类型不同,还可以进行运算的原理在于,可以自动提升数值类型。距离说明:byte a=3; int b=4; b=a+b; 本来类型不一样不可以运算,但因为都是数值型,它们本质上只是占据内存的空间大小不一样,将小的空间提高,并不影响计算。这里将byte的一个字节提升至四个字节的int,本质上数值大小没变,只是空间提升,不会影响计算结果,这就是这个原理能够执行的原因。

接着,如果byte a=3;int b=4;a=a+b的话,在DOS运算中,会报错为精度丢失。右边计算的时候,自动提升类型,提高空间是没有问题的,但是在将四个字节的数据赋值到一个字节的空间中时,就会产生精度丢失。为了强行将四个字节的内容赋值给一个字节的空间,这就产生了强制类型转换,a=(byte) (a+b)但我有点搞不清的是,强制的意义何在?在强制类型转换时,会存在舍弃,丢失精度的问题。有时候舍弃完,得到的是负数。在计算机中,到底存放的二进制是符号型还是真值?

时间: 2024-10-18 08:27:29

JAVA-初步认识-第二章-自动类型提升&强制类型转换的相关文章

java 基本数据类型及自动类型提升

1.Java的8种基本数据类型及其所占空间大小: boolean  8bit/1byte byte      8bit/1byte char      16bit/2byte short     16bit/2byte float      32bit/4byte int        32bit/4byte long      64bit/8byte double  64bit/8byte 2.Java自动类型转换 1)两种类型是彼此兼容的 2)转换的目的类型占得空间范围一定要大于转化的源类型

JAVA-初步认识-第二章-字符类型的运算

一. 第二章知识点脉络分析 第二章的题目就叫<JAVA语言基础>,先介绍了JAVA语言中,常见的基础知识点名词:关键字,标识符,注释,常量和变量,函数和数组.到目前为止,还没有完全学完.在现有的学习过程中,我们做一个知识点脉络分析. 前三个基础知识点,关键字,标识符和注释,只是介绍了书写的规则.后面的常量和变量是一个重点,而函数和数组压根就没有进行介绍.在常量和变量这个重点知识点中,无论是常量还是变量都是数据,从而我们在定义和使用变量时,会涉及不同类型的数据,这就需要我们对数据的类型进行仔细地

Java图示(第二章 Java语言基础)

Java图示(第二章 Java语言基础) 三个基本部分:一个包声明(package语句).任意数量的引入(import语句).类和接口声明(class和interface语句) 1.包声明—package语句 1)包是类和接口的集合,即类库 2)用类库管理类,方便管理 3)Java类都在类库中 4)只有一条包声明,且为第一条 2.引入语句—import语句 1)import语句在包语句后,所有类或接口前 2)两种形式 (1)import 包名.类名: (2)import 包名*://编译器会识别

2.4.5-Java语言基础(类型提升&amp;强制转换)

自动类型转换(也叫隐式类型转换) 强制类型转换(也叫显式类型转换) 类型转换的原理 什么时候要用强制类型转换? 表达式的 数据类型自动提升 ?  所有的byte型.short型和char的值将被提升到int型. ?  如果一个操作数是long型,计算结果就是long型: ?  如果一个操作数是float型,计算结果就是float型: ?  如果一个操作数是double型,计算结果就是double型. 分析 ?  System.out.println('a') 与System.out.printl

Thinking In Java笔记(第二章 一切都是对象)

第二章 一切都是对象 2.1 用引用操纵对象 每种语言都具有操纵内存中元素的方式,必须注意将要处理的是什么数据类型,是直接操纵元素还是基于某种特殊语法间接表示(例如C和C++里的指针)来操纵对象. java中一切都被视为对象,可以用单一固定的语法,但程序员所操纵的标识符实际上只是对象的一个"引用",引用可以独立于对象存在,也可以和实际的对象相关联.例如: String s1; String s2 = new String("hello world"); 上面的s1即

java编程思想 第二章

这篇时间较之前篇章时间靠后,是由于,某一天晚上看完Java编程思想文献之后来不及做笔记了. 以下笔记基本为转载,不是原创 第二章   一切都是对象 目录: 2.1 用引用操纵对象 2.2 必须由你创建所有对象 2.3 永远不需要销毁对象 2.4 创建新的数据类型:类 2.5 方法.参数和返回值 2.6 构建一个Java程序 2.7 你的第一个Java程序 2.8 注释和嵌入式文档 2.9 编码风格 2.1 用引用操纵对象 一切都看作对象,操纵的标识符实际上是对象的一个“引用”,遥控器(引用)操纵

[Effective Java 读书笔记] 第二章 创建和销毁对象 第一条

第二章  创建和销毁对象 第一条 使用静态工厂方法替代构造器,原因: 静态工厂方法可以有不同的名字,也就是说,构造器只能通过参数的不同来区分不同的目的,静态工厂在名字上就能表达不同的目的 静态工厂方法不用每次调用的时候都创建新的对象(其实是因为它是static的,所以只能用static的,所以是一早就创建了,不需要重复创建吧..),比如书中 Boolean.valueOf(boolean) 1 public static final Boolean TRUE = new Boolean(true

int类型和byte类型的强制类型转换

今天在读<Java网络编程>这本书的第二章 流 时,看到书中有一个地方关于int强制转换为byte类型时应注意的地方.这个地方有点细节,不过就应该把这种细节把握住. 情况是这样的,讲到InputStream的抽象方法read时,说到read返回一个int型,但实际是一个byte型的数据.这点从API也能考证.如图: 那么问题来了,int占4个字节,byte占1个字节,我们循环读取的时候将int型数组强制类型转换成byte时,会发生什么情况呢?代码如下: 1个字节占8位,既然实际返回的是byte

第二节 引用变量的强制类型转换

什么是多态 主讲人:王少华       QQ群号:483773664 学习目标: 1)父类与子类间转换:向上转型 2)使用父类作为方法形参实现多态 3)使用父类作为返回值实现多态 一.子类到父类的转换(向上转型) (一)基本数据之间的类型转换 1.自动进行类型转换 //将int型常量或变量的值赋给double型变量,可以自动进行类型转换 int i = 5; double dl = i; 2.强制类型的转换 类型转换运算符是小括号,类型转换运算符的用法是 (type)variable //将do