注销网站 取消接入,php框架做网站好处,编程软件免费中文版,网络推广公司能干嘛最近事情太多#xff0c;没太时间写博客。今天抽空再整理整理面试中的那点事吧#xff0c;帮助那些正在找工作或想跳槽找工作的学弟学妹们。
前面我己写过多篇推文#xff0c;相信看过我文章的伙伴们已经了解掌握了不少。从目前流行的开发技术、常见的面试问题以及问题的答…最近事情太多没太时间写博客。今天抽空再整理整理面试中的那点事吧帮助那些正在找工作或想跳槽找工作的学弟学妹们。
前面我己写过多篇推文相信看过我文章的伙伴们已经了解掌握了不少。从目前流行的开发技术、常见的面试问题以及问题的答案都已经写的特别清楚了今天我给写一篇初级Java开发面试必问项供大家阅读参考。
初级Java开发面试必问项 标识符、字面值、变量、数据类型该学学了标识符关于java语言当中的标识符1、什么是标识符2、标识符的命名规则【不按照这个规则来编译器会报错这是语法】3、表示符的命名规则【只是一种规范不属于语法不遵守规范编译器不会报错】4、合法和不合法的标识符字面值关于字面值变量一、关于java语言当中的变量二、关于java语言当中的变量使用所有的基础语法开发系统业务三、关于java中的变量四、关于变量的分类:数据类型一、关于java中的数据类型二、关于八种数据类型的默认值三、关于java语言中的char类型四、关于java语言当中的整数型五、关于java中的整数型六、关于浮点型数据类型七、关于布尔型数据类型八、关于基本数据类型之间的互相转换转换规则标识符
关于java语言当中的标识符
1、什么是标识符
在java源程序当中凡是程序员有权利自己命名的单词都是标识符标识符在EditPlus编辑器当中以黑色字体高亮显示标识符可以标识什么元素呢类名 * 方法名 * 变量名 * 常量名 等等…
2、标识符的命名规则【不按照这个规则来编译器会报错这是语法】
一个合法的标识符只能由“数字、字母、下划线_、美元符号$”组成不能含有其他符号不能数字开头严格区分大小写关键字不能做标识符理论上无长度限制但是最好不要太长
3、表示符的命名规则【只是一种规范不属于语法不遵守规范编译器不会报错】
//最好见名知意public class UserService{public void login(String username,String password){}}
//遵守驼峰命名方式
//Java开发交流君样593142328SystemService UserService CustomerService类名、接口名首字母大写后面每个单词首字母大写变量名、方法名首字母大写后面每个单词首字母大写长量名全部大写
4、合法和不合法的标识符
合法不合法_123Test123TestHelloWorld!A_B_CHelloWorld#$ABCHello Worldclass1classpublic0public
*/
public class IdentifierTest01
//IdentifierTest01是一个类名名字可以修改
{//main是一个方法名public static void main(String[] agrs){ //args是一个变量名}//doSome就是方法名public static void doSome(){//i就是变量名int i 10;}//Java开发交流君样593142328
}字面值
关于字面值
字面值
10、100、3.14、“abc”、‘a’、true、false
字面值就是数据字面值是java源程序的组成部分之一包括标识符和关键字他们都是java源程序的组成部分。数据在现实世界当中是分门别类的所以数据在计算机编程语言当中也是有类型的【数据类型】
【数据类型】【数据类型】10、100属于整数字面值3.14属于浮点型字面值true、false属于布尔型字面值“abc”、“程序员”属于字符串型字面值‘A’、‘人’属于字符型字面值
注意
java语言当中所有的字符串字面值必须使用双引号括起来双引号是半角java语言当中所有的字符型字面值必须使用单引号括起来单引号是半角
*/
public class ConstTest01
{public static void main(String[] args){System.out.println(abc);System.out.println(你最近过得好吗);System.out.println(10);System.out.println(false);System.out.println(true);System.out.println(A);System.out.println(3.14);// 编译报错因为单引号中只能存放单个字符属于字符型字面值// System.out.println(ABC);//Java开发交流君样593142328// 100是一个字面值是一个整数型数值那么既然是数据存储在内存当中必定会占用一定的内存空间。System.out.println(100);//加入Java开发交流君样756584822一起吹水聊天}
}
变量
一、关于java语言当中的变量
1、什么是变量
变量本质上来说是内存中的一块空间这块空间有数据类型有名字、有字面值。变量包含三部分数据类型、名称、字面值【数据】变量是内存中存储数据的最基本的单元。
2、数据类型的作用
不同的数据有不同的类型不同的数据类型底层会分配不同大小的空间。数据类型是指导程序在运行阶段应该分配多大的内存空间。
3、变量要求变量中存储的具体的“数据”必须和变量的“数据类型”一致当不一致的时候编译报错。
4、声明/定义变量的语法格式
数据类型 变量名
数据类型目前我们还没有学习数据类型但是有一种数据类型是整数型叫做int变量名只要是合法的标识符就行规范中要求首字母小写后面每个单词首字母大写 例如 int i: 、int age; 、int length; 、int size、 int num; 其中int是数据类型iagelengthsizenum 都是变量名。
5、变量声明之后怎么赋值 - 语法格式变量名 字面值; - 要求字面值的数据类型必须和变量的数据类型一致。 等号是一个运算符叫做赋值运算符赋值运算等号右边的表示表示式执行结束之后的结果赋值给左边的变量。
6、声明和赋值可以放到一起完成。 int i 10;7、变量赋值之后可以重新赋值变量的值可变化: int i 10; System.out.println(i); //10int i 20; System.out.println(i); //20int i 100; System.out.println(i); //1008、有了变量的概念之后内存空间得到了重复的使用 int i 10; System.out.println(i); ... System.out.println(i);9、通常访问一个变量包括两种访问形式
第一种读取变量中保存的具体数据 get/获取第二种修改变量中保存的具体数据 set/设置 i 20: //setSystem.out.println(i); //get10、变量在一行上可以声明多个 int abc 11、变量必须先声明再赋值才能访问。
int i; 程序执行到这里内存空间并没有开辟出来变量i并没有初始化。所以没有赋值之前是无法访问的。
public class VarTest01
{public static void main(String[] args){//声明一个int类型的变量起名iint i;//Java开发交流君样593142328// 编译报错变量i并没有初始化// System.out.println(i);//加入Java开发交流君样756584822一起吹水聊天// 给i变量赋值i 变量在这里完成初始化内存开辟i 100;System.out.println(i);// i 再次重新赋值i 200;System.out.println(i);// 一行上可以同时声明多个变量// a和b尚未初始化c赋值300// int a,b,c 300;}
}二、关于java语言当中的变量使用所有的基础语法开发系统业务
1、在方法体当中的java代码是遵守自上而下的顺序依次执行的逐行执行。
第一行第二行第三行
**特点**第二行的代码必须完整的结束之后第三行程序才能执行。
2、在同一个“作用域”当中变量名不能重名但是变量可以重新赋值。
public class VarTest02
{public static void main(String[] args)int i 100;System.out.println(i); //100i 200;System.out.println(i); //200// 以下代码顺序有错误先声明然后复制再访问/*System.out.println(k);int k 100;*//*int i 90;System.out.println(i);*/
}三、关于java中的变量 变量的作用域1、什么是作用域 - 变量的作用域其实描述的就是变量的有效范围。在什么范围之内是可以被访问的只要出了这个范围该变量就无法访问了。2、变量的作用域只要记住一句话 出了大括号就不认识了。public class VarTest03
{//注意 这里在static不要去掉static int k 90;public static void main(String[] args)// 变量i的作用域是main方法// 在整个main方法当中是有效的可见的可以访问的int i 100;System.out.println(i): // 可以System.out.println(k): // 可以// 以下会编写一个for循环语句// 这个for循环后面的控制语句的时候详细讲解for(int a0;a10;a){ //a变量的作用域是整个for循环for循环结束之后a变量的内存就释放了}// 这里无法访问a变量// System.out.println(a):int j; // 作用域是main方法for (int j0;j10;j){}System.out.println(j): // 访问的是main方法中的j变量}public static void doSome(String[] args)// 这里无法访问main方法当中的变量i// 已经出了i变量的作用域。// System.out.println(i)://加入Java开发交流君样756584822一起吹水聊天// 可以System.out.println(k):}
}四、关于变量的分类:
根据变量声明的位置分类
局部变量
在方法体当中声明的变量叫做局部变量
成员变量
在方法体外【类体之内】声明的变量叫做成员变量在不同的作用域当中变量名是可以相同的。在同一个作用域当中变量名不能重名。
public class VarTest04
{ // 成员变量int k 200;// 主方法入口public static void main(String[] args){// i变量就是局部变量int i 10;//加入Java开发交流君样756584822一起吹水聊天// java遵循“就近原则”System.out.println(i);}// 成员变量int i 100; // 什么变量// 类体中不能直接编写java语句【除声明变量之外】// System.out.println(i):// doSome方法public static void doSome(){// 局部变量int i 90;}
}数据类型
一、关于java中的数据类型
1、数据类型的作用是什么
程序当中有很多数据每一个数据都是有相关类型的不同的数据类型的数据占用空间大小不同。数据类型的作用是指导JVM在运行程序的时候给该数据分配多大的内存空间。
2、java中的数据类型包括两种
基本数据类型引用数据类型【后边解释】
类、接口、数据、等等…
3、关于基本数据类型
基本数据类型包括四大类八小种
第一类整数型
byte、short、int、long 第二类浮点型float、double 第三类布尔型boolean 第四类字符型char
4、字符串“abc”不属于基本数据类型属于引用数据类型字符属于基本数据类型
字符串使用双引号 “abc”字符使用单引号 ‘a’
5、八种基本数据类型各自占用空间大小是多少
基本数据类型占用空间大小byte1short2int4long8float4double8boolean1char2
6、计算机在任何情况下都只能识别二进制。例如只认识101000101…
现代的计算机底层采用交流电的方式接通和断开就两种状态计算机只识别1或0其他不认识】
7、什么是二进制
数据的一种表示形式十进制表示满十进一原则。二进制表示满二进一原则。 / 例如十进制0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 / 例如二进制0 1 10 11 100 101 110 111 1000 1001 ...0 1 2 3 4 5 6 7 8 98、字节(byte) 1 byte 8 bit 【1个字节 8个比特位】1比特位表示一个二进制位 1/01 KB 1024 Byte、1 MB 1024 KB、1 GB 1024 MB、1 TB 1024 GB1 TB 1024 * 1024 * 1024 * 1024 * 8
9、整数型当中的byte类型占用1个字节所以byte类型的数据占用9个比特位那么byte类型的取值范围是什么
关于java中的数字类型数字都是有正负之分的所以在数字的二进制当中有一个二进制位被称为”符号位“。并且这个”符号位“在所有二进制的最左边0表示正数1表示负数。byte类型最大值01111111 【0000010000000(二进制) - 1】byte类型最大值2的7次方-1结果是127byte类型最小值 -128 【具体的怎么用二进制表示这个和源码、反码、补码有关】byte类型取值范围【-128~127】bytp类型可以标识256个不同的数字【256个不同的二进制】
10、二进制和十进制之间的转换规则
二进制转换成十进制十进制转换成二进制
11、计算机只认识二进制那么计算机是怎么表示现实世界当中的文字的呢?
八种基本数据类型当中byte、short、int、long、float、double、boolean这7种数据类型计算机在表示的时候比较容易因为底层都是数字十进制的数字和二进制之间存在一种固定的转换规则。但是八种基本数据类型当中char类型表示的是现实世界中的文字文字和计算机二进制之间”默认“情况下是不存在任何转换关系的。为了让计算机可以表示现实世界当中的文字我们需要进行人为的干涉需要人负责提前制定好”文字“和”二进制“之间的对照关系。这种对照转换关系被称为字符编码。计算机最初只支持英文最先出现的字符编码是ASCII码 a - 97 【01100001】A - 650 - 48a -- (按照ASCII解码) -- 0110000101100001 -- 按照ASCII编码 -- a编码和解码的时候采用同一套字典/对照表不会出现乱码。 当解码和编码的时候采用的不是同一套对照表会出现乱码问题 跟着计算机的发展后来出现了一种编码方式是国际标组织ISO制定这种编码方式支持西欧语言向上兼容ASCII码仍然不支持中文这种编码方式是ISO-8859-1又被称为latin-1 跟着计算机向亚洲发展计算机开始支持中文、日文、韩文等国家文字其中支持简体中文的编码方式GB2312 GBK GB18030 支持繁体中文大五码 后来出现了一种编码方式统一了全球所有的文字容量较大这种编码方式叫做unicode编码 unicode编码方式有很多种具体的实现 UTF-8、UTF-16、UTF-32.… java语言采用的是哪一种编码方式呢 java语言源代码采用的是unicode编码方式所以标识符可以写中文。 现在在实际开发中一般使用UTF-8编码方式较多。【统一编码方式】
12、八种基本数据类型的取值范围
类型取值范围byte[-128 ~ 127]short[-32768 ~ 32767]int[-2147483648 ~ 2147483647]long/float/double/boolean[true,falese]char[0 ~ 65535]注意short和char所表示的种类总数是一样的只不过char可以标识更大的正整数。因为char没有负数。13、以下java程序主要讲解的是数据类型之char类型 public class DataTypeTest01
{public static void main(String[] args){// 定义一个char类型的变量起名c同时赋值字符achar c a;System.out.print(c);// 一个中文占用2个字节char类型正好是2个字节// 所以java中的char类型变量可以存储一个中文字符char x 国System.out.print(x);// 编译错误// ab是字符串不能使用单引号括起来// char y ab;// a是字符串类型// k变量是char类型// 类型不兼容编译错误char k a;// 声明char e;// 赋值e e;// 再次赋值System.out.print(e);}
}
二、关于八种数据类型的默认值
数据类型默认值byteshortintlong0floatdouble0.0booleanfalse【在C语言中true是1false是0】char\u0000
八种基本数据类型的默认值是一切向0看齐。
public class DataTypeTest02
{// 这里的static必须加别问。static int k 1000;// 变量还是遵守这个语法必须先声明在赋值,才能访问。// 成员变量没有手动赋值系统会默认赋值【局部变量不会】static int f; //成员变量public static void main(String[] args){/*int i; //局部变量System.out.print(i);*/System.out.print(k);System.out.print(f);}
}三、关于java语言中的char类型
转义字符
转义字符出现在特殊字符之前会将特殊字符转换成普通字符。
\n 换行符 \t 制表符 ’ 普通的单引号 \ 普通的反斜杠 普通的双引号 public class DataTypeTest03
{public static void main(String[] args){// 普通的n字符char c1 n:System.out.print(c1);// 依照目前所学知识一下程序无法编译通过因为显示是一个字符串不能使用单引号括起来// 但是经过编译发现编译通过了这说明以下并不是一个字符串而是“一个”字符// 这是一个“换行符”属于char类型的数据// 反斜杠在java语言当中具有转义功能。char c2 \n;/*System.out.print(Hello);System.out.print(World!);*/// System.out.println()和System.out.print()区别// println输出之后换行print表示输出但是不换行/*System.out.print(Hello);System.out.println(World!);*/System.out.print(A);// System.out.print(c2);System.out.println(B);// 普通的t字符char x t;System.out.print(t);// 制表符tab// 强调制表符和空格不一样他们的ASCII不一样体现在键盘上两个不同的“按键”char y \t;System.out.println(A);System.out.print(y);System.out.println(B);// 要求在控制台上输出“反斜杠字符”/*// 反斜杠蒋后面的单引号转义成不具备特殊含义的普通单引号字符左边的单引号缺少了结束的单引号字符编译报错char k \;System.out.println(k);*//*// 解释第一个反斜杠具有转义功能将后面的反斜杠转义为普通的反斜杠字符。结论在java当中两个反斜杠代表一个普通的反斜杠字符*/char k \\;System.out.println(k);// 在控制台上输出一个普通的单引号字符// java中不允许这样编写程序编译报错// char a ; // 以下编译报错第一个单引号和第二个单引号配对儿最后的单引号找不到另一半// char a ;// System.out.println(a);// 反斜杠具有转义功能将第二个单引号转换成普通的单引号字符第一个单引号和最后单引号配对。char a \;System.out.println(a);char f ;System.out.println(f);// 编译错误// System.out.println(HelloWorld!);// 纠正System.out.println(\HelloWorld!\);char m 中;System.out.println(m);// JDK中自带的native2ascii.exe命令可以将文字转换成unicode编码形式// 怎么使用这个命令// 在命令行输出native2ascii,回车然后输入文字之后回车即可得到unicode编码char n \u4e2d; // 中对应的unicode编码是 4e2dSystem.out.println(n);// 编译错误// char g 4e2d;// 编译错误// char g u4e2d;// 通过反斜杠u联合起来后面的一串数字是某个文字的unicode编码char g \u4e2d;System.out.println(g);// char类型的默认值char c \u0000System.out.println(c);}
}四、关于java语言当中的整数型 数据类型 占用空间大小 默认值 取值范围----------------------------------------------------------------byte 1 0 [-128 ~ 127]short 2 0 [-32768 ~ 32767]int 4 0 [-2147483648 ~ 2147483647]long 8 0L1、java语言当中的“整数型字面值”被默认当做int类型来处理要让这个“整数型字面值”被当做long类型来处理的话需要在“整数型字面值”后面添加1/L,建议使用大写的L
2、java语言当中的整数型字面值有三种表示方式:
第一种方式十进制【是一种缺省的默认的方式】第二种方式八进制【在编写八进制整数型字面值的时候需要以0开始】第三中方式十六进制【在编写十六进制整数型字面值的时候需要以0x开始】
public class DataTypeTest04
{public static void main(String[] args){int a 10; // 缺省int b 010; // 整数型字面值以开头的后面那一串数字就是八进制形式int c 0x10; // 整数型字面值以0x开头的后面一串数字就是十六进制形成System.out.println(a); // 10System.out.println(b); // 8System.out.println(c); // 16System.out.println(a b c); //34// 123这个整数型字面值int类型// i 变量声明的时候也是int类型// int类型的123赋值给int类型的变量i不存在类型转换int i 123;System.out.println(i);// 456整数型字面值被当做int类型占用4个字节// x变量在声明的时候是long类型占用8个字节// int类型的字面值456赋值给long类型的变量x存在类型转换// int类型转换成long类型// long类型是大容量// 小容量可以自动转换成大容量称为自动类型转换机制。long x 456;System.out.println(x);// 2147483647字面值是int类型占用4个字节// y是long类型占用8个字节自动类型转换long y 2147483647;System.out.println(y);// 编译错误过大的整数2147483648// 2147483648 被当做int类型4个字节处理但是这个字面值超出int类型范围// long z 2147483648;// 解决错误// 2147483648字面值一上来就当做long类型来处理在字面值后面添加L// 2147483648L是8个字节的long类型// z是long类型变量以下程序不存在类型转换long z 2147483648L;System.out.println(z);}
}五、关于java中的整数型
byte short int long
public class DataTypeTest05
{public static void main(String[] args){// l00L是long类型字面值// x是long类型变量// 不存在类型转换直接赋值long x 100L;// x变量是long类型8个字节// y变量是int类型4个字节// 以下程序可以编译通过吗// 编译报错大容量不能直接赋值给小容量// int y x;// 大容量转换成小容量需要进行强制类型转换// 强制类型转换需要加“强制类型转换符”// 加上强制类型转换符之后编译通过了但是运行阶段可能损失精度。// 所以强制类型转换谨慎使用因为损失精度之后可能损失很严重。// 强转原理// 原始数据00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100// 强转之后的数据00000000 00000000 00000000 01100100// 将左边的二进制砍掉【所有的数据强转的时候都是这样完成的】int y (int)x;System.out.println(y);// 原始数据00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000// 强转之后的数据10000000 00000000 00000000 00000000// 10000000 00000000 00000000 00000000 目前存储在计算机内部计算机存储数据都是采用补码的形式存储// 所以 10000000 00000000 00000000 00000000 现在是一个补码形式// 将以上的补码转换到原码就是最终的结果long k 2147483648L;int e (int)k;System.out.println(e); // 损失精度严重结果是负数 【-2147483648】// 分析以下程序是否可以编译通过// 依据目前所学内容以下程序是无法编译通过的// 理由50是int类型的字面值b是byte类型的变量显然是大容量int转换成小容量byte// 大容量转换成小容量是需要添加强制类型转换符的以下程序没有添加强转符号所以编译报错。// 但是在实际编译的时候一下代码编译通过这说明在java语言中当一个整数型字面值// 没有超过byte类型取值范围的话该字面值可以直接赋值给byte类型的变量。byte b 50; // 可以byte c 127; // 可以// 编译报错128这个int类型的字面值已经超出了byte类型的取值范围不能直接赋值给byte类型的变量// byte b1 128; // 纠正错误需要使用强制类型转换符// 但是一定会损失精度// 原始数据10000000 00000000 00000000 00000000// 强转之后10000000 【这是存储在计算机内部的这是一个补码它的原码是什么】byte b1 (byte)128; // -128System.out.println(b1);/*计算机二进制有三种表示形式原码、反码、补码计算机在任何情况下底层表示和存储数据的时候采用了补码形式。整数的补码和原码相同负数的补码负数的绝对值对应的二进制码所有二进制拉取反再加1补码10000000原码计算机过程- 10000000 - 1 -- 01111111- 10000000 -- 128- -128*/// 原始数据00000000 00000000 00000000 11000110// 强制类型转换之后11000110// 11000110 - 1 -- 11000101// 00111010 【2 8 16 32】 -- 58// 58byte m (byte)198;System.out.println(m); // -58short s 32767; // 通过// short s 32768; // 编译报错// 65535是int类型4个字节// cc是char类型2个字节// 按照以前所学知识点来说以下程序是编译报错的。// char cc 65535; // 通过// cc 65536; //编译报错/*当一个整数字面值没有超出byteshortchar的取值范围这个字面值可以直接赋值给byteshortchar类型的变量这种机制SUN允许了目的是为了方便程序员的编程。*/}
}六、关于浮点型数据类型
float单精度【4个字节】 double 双精度【8个字节精度较高】
double的精度太低【相对来说的】不适合做财务软件。 财务涉及到钱的问题要求精度较高所以SUN在基础SE类库当中 为程序员准备了精确度更高的类型只不过这种类型是一种引用数据类型不属于基本数据类型它是 java.math.BigDecimal
其实java程序中SUN提供了一套庞大的类库java程序员是基于这套基础的类库来进行开发的所以要知道java的SE类库的字节码在哪里要知道java的SE类库的源码在哪里。
SE类库字节码\Java\jdk1.8.0_101\jre\lib\rt.jarSE类库源码: D:\Java\jdk1.8.0_101\src.zip 例如String.java和String.class 我们的(String[] args)中的String使用的就是String.class字节码文件
在java语言当中所有的浮点型字面值【3.0】默认被当做double类型来处理 要想改字面值当做float类型来处理需要在字面值后面添加F/f
注意
double和float在计算机内部二进制存储的时候存储的都是近似值。 在现实世界当中有一些数字是无限循环的例如3.3333333333333… 计算机的资源是有限的用有限的资源存储无限的数据只能存储近似值
public class DataTypeTest06
{public static void main(String[] args){// 3.0是double类型的字面值// d是double类型的变量// 不存在类型转换double d 3.0;System.out.println(d);// 5.1是double类型的字面值// f是float类型的变量// 大容量转换成小容量需要加强制类型转换符所以以下程序编译错误。// float f 5.1;// 解决方案// 第一种方式强制类型转换// float f (float)5.1;// 第二种方式没有类型转换float f 5.1f;}
}
七、关于布尔型数据类型
boolean
在java语言当boolea类型只有两个值turefals没有其他值。 不像C语言当中0和1可以表示假和真。
在底层存储的时候boolean类型占用1个字节因为实际存储的时候false底层是0true底层是1.
布尔类型在实际开发当中非常重要经常使用在逻辑运算和条件控制语句当中。
public class DataTypeTest07
{public static void main(String[] args){// 编译错误不兼容的类型// boolean flag 1;//boolean loginSuccess true; boolean loginSuccess false;// if语句以后在解释【条件控制语句】if(loginSuccess){System.out.println(恭喜你登录成功);}else{System.out.println(对不起用户名不存在或者密码错误);}}
}八、关于基本数据类型之间的互相转换转换规则
八种基本数据类型当中出布尔类型之外剩下的7种类型之间都可以互相转换小容量向大容量转换称为自动类型转换容量从小到大排序 byte short int long float double char 注任何浮点类型不管占用多少个字节都比整数型容量大。 char和short可表示的种类数量相同但是char可以取更大的正整数大容量转换成小容量叫做强制类型转换需要加强制类型转换符程序才能编译通过但是在运行阶段可能会损失精度所以谨慎使用。当整数字面值没有超出byteshortchar的取值范围可以直接赋值给byteshortchar类型的变量byteshortchar混合运算的时候各自先转换成int类型在做运算。多种数据类型混合运算先转换成容量最大的那种类型再做运算。
注意
byte b 3; 可以编译通过3没有超出byte类型取值范围 int i 10; byte b i / 3; 编译报错编译器只检查语法不会“运算” i / 3
public class DataTypeTest08
{public static void main(String[] args){// 出现错误1000超出了byte的范围// byte a 1000;// 正确因为20没有超出byte范围byte a 20;// 变量不能重名// short a 1000;// 正确因为数值1000没有超出short类型的范围// 所以赋值正确short b 1000;// 正确因为默认就是int并没有超出int范围int c 1000;// 正确可以自动转换long d c;// 错误出现精度丢失问题大类型--小类型会出现问题// int e d;// 将long强制转换成int类型// 因为值1000没有超出int范围所以转换是正确的int e (int)d;// 因为java中的运算会转成最大类型// 而10和3默认为int所以运算后的最大类型也是int// 所以是正确的int f 10/3; // 3// 声明10为long类型long g 10;// 出现错误多个数值在运算过程中会转换成容量大的类型// 以下示例最大的类型为double而h为int所以就会出现大类型long到小类型int的转换将会出现精度丢失问题// int h g/3;// 可以强制转换因为运算结果没有超出int范围// int h (int)g/3;// 可以采用long类型来接受运算结果// long h g/3;// 出现精度损失问题以下问题主要是优先级的问题// 将g转换int然后又将int类型的g转换成byte最后byte类型的g和3运算那么它的运算结果类型就是int所以int赋值给byte就出现了精度损失问题// byte h (byte)(int)g/3;// 正确// byte h (byte)(int)(g/3);// 不能转换还有因为优先级问题// byte h (byte)g/3;// 可以转换因为运算结果没有超出byte范围// byte h (byte)(g/3);// 可以转换因为运算结果没有超出short范围short h (short)(g/3);short i 10;// 错误short和byte运算首先会转换成int再运算// 所以运算结果为intint赋值给short就会出现精度丢失问题// short k i j;// 可以将运算结果强制转换成short// short k (short)(i j);// 因为运算结果为int所以可以采用int类型接手int k i j;char l a;System.out.println(l); // a// 输出结果为97也就是a的ascii值System.out.println((byte)l); // 97int m l 100;// 输出结果为197取得a的ascii码值然后与100进行先加运算System.out.println(m); // 197}
}最后祝大家早日学有所成拿到满意offer