栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java SE】2.java中变量和表达式计算的相关问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java SE】2.java中变量和表达式计算的相关问题

文章目录
    • 一、变量
      • 1.概念、语法格式以及分类
      • 2.注意
        • 1)不初始化是否报错问题
        • 2)变量范围与超过范围是不是报错问题
        • 3)其他
      • 3.拓展
    • 二、有关表达式计算中的类型问题【!!!】
      • 1.类型转换
        • 1)小转大——隐式类型转换
        • 2)大转小——强制类型转换
          • 注意
      • 2.类型提升

一、变量 1.概念、语法格式以及分类

概念:这些经常改变的内容,在Java程序中,称为变量。

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

分类:与基本数据类型(如下表所示)相对应

数据类型关键字内存占用包装类
字节型byte1字节Byte
短整型short2字节Short
整形int4字节Integer
长整型long8字节Long
单精度浮点型float4字节Float
双精度浮点型double8字节Double
布尔型boolean没有明确规定Boolean
字符型char2字节Character
2.注意 1)不初始化是否报错问题

作为类成员变量,无论初始化与否都不会出错。

作为函数代码里的变量,无论什么类型不初始化全部都会报错。

成员变量会被系统默认初始化,局部变量必须得手写初始化

注:成员变量是指在类体的变量部分中定义的变量,也称为属性。成员变量声明在类中,方法体之外。

2)变量范围与超过范围是不是报错问题
//1.可以通过包装类直接得到数据类型的最大值最小值
//2.字面常量赋值超过范围——不能通过编译

// int型变量所能表示的范围 
System.Out.println(Integer.MIN_VALUE); System.Out.println(Integer.MAX_VALUE);
// long型变量所能表示的范围:这个数据范围远超过 int 的表示范围. 一般在大型工程场景使用.
System.Out.println(Long.MIN_VALUE); System.Out.println(Long.MAX_VALUE);
// short型变量所能表示的范围
System.Out.println(Short.MIN_VALUE); System.Out.println(Short.MAX_VALUE);
// byte型变量所能表示的范围: 
System.Out.println(Byte.MIN_VALUE); System.Out.println(Byte.MAX_VALUE);
//……
//都是可以计算出来的

当我们采用表达式打印超过范围的数时可以通过编译,但其实它会溢出,最后得到一个不符合预期的数值 。

3)其他
  1. 为了区分int和long类型,一般建议:long类型变量的初始值之后加L或者l ,同时,为了明显区分数字1和小写l,我们一般写L。

  2. double /float类型的内存布局遵守 IEEE 754 标准(和C语言一样), 使用有限的内存空间表示可能无限的小数, 一定会存在一定的精度误差,所以浮点数都是近似值。同时,由于float比double范围小,所以会优先使用double类型。

  3. Java 的 boolean 类型和 int 不能相互转换, 不存在 1非0表示 true, 0 表示 false 这样的用法,同时也不存在这样的运算boolean value = true; System.out.println(value + 1);会编译报错。【编译时可以检查出语法错误】

  4. jvm规范中没有说boolean占几个字节,但是在Oracle公司的虚拟机实现中,boolean占1个字节。

  5. 除法分为整数除法和小数除法,这点与C类似。

  6. 单精度后边是写f或者F,当我们定义时不些的时候会发生隐式类型转换。

  7. java中的char采用的是Unicode编码,并且是两个字节,所以可以放中文。

    【在使用命令窗口编译时,如果在执行出现不能正确解析汉字的情况,那么这时需要加入一条语句,参考之前写的java程序运行那篇笔记】

3.拓展

1.Unicode字符集不仅可以表示英文还有希腊文、中文等其他国家的语言,向下兼容ASCII字母集,但其实我们做题只是绝大多数时候用的ASCII里边的,所以没有必要再去专门研究这个字母集。

2.谈论char的最小最大其实没有太大意义。他们没有符号位【所以共有65535个】,本质上是字符,但是我们经常用的IDEA无法正常解析出来,并且他也没有太大的应用场景。

二、有关表达式计算中的类型问题【!!!】

这里的大小是指表示能力。

1.类型转换 1)小转大——隐式类型转换
//1.在变量之间赋值过程中——整形家族
//byte 
2)大转小——强制类型转换 
//1.关于byte的计算
//同类型相加也会进行转换
byte a1=100;
byte a2=50;
byte ret=(byte)(a1+a2);//计算机计算时的最小操作单位摆在那了——最小是4字节

//超范围的时候
byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换
byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错

//2.整形/浮点型,精度大的给小的
//同家族之间交叉
int a = 10; 
long b = 100L;
b = a; // int-->long,数据范围由小到大,隐式转换
a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败 float f = 3.14F;

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

//不同类型交错
//eg.double和int
a = d; // 报错,类型不兼容 ——这里跟C中不同,这里直接不能通过编译
a = (int)d; // double没有int表示的数据范围大,需要强转,小数点之后全部丢弃
注意

没有意义,但是可以:比如double&char【打印的都是字符,同时double会把小数丢了】

对于不相干的类型,存在强制类型转换也不行钉子户,最典型的就是布尔类型和其他任何类型。

2.类型提升

运算时,不同但属于同一大类进行计算时小类型会提升至大类型,与C是一样的。

同时java与C一样,整型算术运算总是至少以缺省【缺省即默认】整型类型的精度来进行的。

这里我们经常看到的就是,byte运算时的整型提升、int到long的、float到double。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026915.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号