java——与c++之不同——基本类型
来源:互联网 发布:js replace函数填变量 编辑:程序博客网 时间:2024/06/10 19:05
基本类型
- 布尔型:boolean(1-bit)
- 字符型:char(16-bit),无wchar_t类型
- 整型:byte(8-bit),short(16-bit),int(32-bit),long(64-bit),无long long类型
- 浮点型:float(32-bit),double(64-bit),无long double类型
- void型:只能用于方法返回类型表示方法无返回值,不能用于方法形参列表表示形参列表为空
注1:整型都是带符号的,不区分signed和unsigned,因此无signed和unsigned关键字
注2:因为jvm原因,java跨平台,基本类型字长固定,与平台无关,因此java无sizeof运算符
字面值常量
- char通用转义时不支持16进制
- long型常量后缀l或L
- 浮点型常量后缀float(f|F),double(d|D),默认为double
char c1 = 'a'; char c2 = '\n'; char c3 = '\123'; //char c4 = '\x7a'; //char c5 = '\X8b';
字面值常量类型
public static void type_check(byte b) { System.out.println("byte"); } public static void type_check(short s) { System.out.println("short"); }public static void type_check(int i) { System.out.println("int"); } public static void type_check(long l) { System.out.println("long"); }public static void typeinfo(){ type_check(5); type_check(-2147483648);//32位int取值下限 type_check(2147483647);//32位int取值上限 //type_check(-2147483649);//32位int取值下限-1 //type_check(2147483648);//32位int取值上限+1 //type_check(-9223372036854775808);//64位long取值下限 //type_check(9223372036854775807);//64位long取值上限 //type_check(-9223372036854775809);//64位long取值下限-1 //type_check(9223372036854775808);//64位long取值上限+1}
output:
intintint
结论:
- 整型字面值常量允许表达范围:[-2147483648, 2147483647]([-2^31, 2^31 - 1]),因此整型字面值常量默认类型为int
- 浮点型字面值常量默认类型为double
隐式转换
相较于c++,java以牺牲基本类型转换的灵活性换取基本类型转换的安全性,因此java允许的基本类型转换非常有限
- boolean是独立类型,不能与算术类型相互转换,不存在true->1,false->0,非0->true,0->false的转换
- char存放Unicode字符编码,而Unicode字符编码都是非负数,因此char取值范围为[0~2^16-1]
- java跨平台,因此基本类型取值范围固定,算术类型取值范围顺序:byte->short->int->long->float->double
- java基本类型隐式转换遵循安全原则(取值范围包含原则),如果一个类型取值范围是另一类型取值范围子集,则允许转换(转换过程中,数据不会丢失)
- 遵循java安全原则,算术类型可按照byte->short->int->long->float->double顺序隐式转换,char可隐式转换为int,long,float,double,但算术类型不可转换为char(char取值范围非负数)
- 整型字面值常量赋值给基本类型时,编译器会检查,如果整型字面值常量在目标类型取值范围内编译正确,如果超出目标类型取值范围编译error
类型提升
基本类型提升原则类似基本类型隐式转换,遵循java安全原则
- boolean是独立类型,不能参与算术运算,因此不能提升为任何其他基本类型
- 遵循取值范围包含原则,如果一个类型取值范围是另一类型取值范围子集,则允许提升(提升过程中,数据不会丢失)
- 类型提升时至少提升至int开始,因此byte,short,char无条件提升至int
- 类型提升顺序:(byte,short,char)->int->long->float->double
static void type_check(boolean b) { System.out.println("boolean"); }static void type_check(char c) { System.out.println("char"); }static void type_check(byte b) { System.out.println("byte"); }static void type_check(short s) { System.out.println("short"); }static void type_check(int i) { System.out.println("int"); }static void type_check(long l) { System.out.println("long"); }static void type_check(float f) { System.out.println("float"); }static void type_check(double d) { System.out.println("double"); }static void matchType(){ boolean flag = true; char c = 5; byte b = 5; short s =5; int i = 5; long l = 5; float f = 5; double d = 5; System.out.println("-----same type-----"); //type_check(flag + flag); type_check(c + c); type_check(b + b); type_check(s + s); type_check(i + i); type_check(l + l); type_check(f + f); type_check(d + d); System.out.println("-----char and other-----"); type_check(c + b); type_check(c + s); type_check(c + i); type_check(c + l); type_check(c + f); type_check(c + d); System.out.println("-----different type-----"); type_check(b + s); type_check(s + i); type_check(i + l); type_check(l + f); type_check(f + d);}
output:
-----same type-----intintintintlongfloatdouble-----char and other-----intintintlongfloatdouble-----different type-----intintlongfloatdouble
阅读全文
0 0
- java——与c比较之不同——基本类型
- java——与c++之不同——基本类型
- java——与c比较之不同(三)
- Android中的java基础(二)——装箱与拆箱及不同基本类型的比较(类型转换)
- cpp——与c之不同——内置类型
- java——与c++之不同——复合类型——数组
- java——与c++之不同——复合类型——enum
- 基本类型与基本类型的包装类型,即生瑜何生亮?——40岁偷练java之内功心法(2)
- java——与c比较之不同——指针 引用 struct union 数组
- 黑马程序员——Java之字符串与基本类型包装类
- V尼熊的java之旅——基本类型与运算篇
- java——与c++之不同——复合类型——指针 引用 struct union
- cpp——与c之不同——enum
- cpp——与c之不同——指针
- cpp——与c之不同——函数
- cpp——与c之不同——初始化
- C++与C不同之二——引用
- java——与c++之不同——类
- scala基础之泛型详解
- iOS ftp下载远程文件夹内容(文件夹目录结构不变)
- Sublime Text 3 快捷键精华版
- JQuery. tokenInput 解析-02 关于过滤select数据
- Kotlin让Android更简单~
- java——与c++之不同——基本类型
- 设计模式 原型设计 Prototype
- MariaDB、MySQL双主互备操作及说明
- php操作redis的方法
- Android使用MediaRecorder录音导致java.lang.RuntimeException: start failed.
- JavaScript数据类型
- keras的EarlyStopping callbacks的使用与技巧
- hadoop集群安装hive
- LeetCode 236. Lowest Common Ancestor of a Binary Tree