JavaSE 数据类型以及基本转化与包装
数据类型.
先简单介绍java中的语法可以速速过一遍
1.基本类型(八个)
数值型
整型类型
-
byte型:1字节 8bit位 第一位是符号位
byte a = 127;
-
short型:2字节
short b = 32767;
-
int 型:4字节
int c = 123; int c = 0b123;//二进制 int c = 0123;//八进制 int c = 0x123;//十六进制
-
long型:8字节
long d = 123l; long d = 123L;//数字后缀L或l
0b或0B开头数字 为二进制
0开头数字为 八进制
0x或0X开头为16进制
浮点类型
-
float :4字节
-
单精度,尾数可以精确到7位有效数字
float e = 123.4f//数字后缀加f或F
-
double: 8字节
-
双精度,精度是float的两倍。通常采用此类型。
double f = 123.4
%%java浮点型默认为double类型%%
-
十进制数形式,例如:
3.14 314.0
-
科学记数法形式,如
3.14e2
3.14E2
-
字符型 (char)2字节
-
使用了Unicode 编码 兼容了Ascll码
-
可以参与算术运算,本质是使用了Unicode编码表中对应的10进制编号来进行计算
逻辑型(boolean)
-
ture
-
false
2.引用类型
String类型(字符串)(相关API会在API.md文件里面介绍)
String是一个类,String的变量是对象的管理者而非所有者
-
'+'相当于字符串连接符
-
String s = "abcd";
-
1.任意八种基本数据类型的数据与String类型只能进行连接“+”运算(字符串连接),且结果一定也是String类型
-
2.String类型不能转为其他的基本类型
String s = new String("a string");//创建一个String的对象,用“a string”初始化这个对象
String a = "hello";
String b = "world";
String c = a + b;
String d = a + b + 12;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
运行结果:
```java
hello
world
helloworld
helloworld12
Process finished with exit code 0
-
输入字符串
in.next();读入一个单词,单词标志是空格(包括空格、tap和换行)
in.nextLine();读入一整行
-
比较两个String
if(input == "bye"){//比较是否同一个 ···· } if(input.equals("bye")){//比较内容是否相同 ···· }
Strings应该用.equals 来比较
接口(interface)(后面会介绍)
数组([])(后面专门介绍)
包裹类型(特殊的数据类型)
- 它用于将基本数据类型包装成对象
基本数据类型的转换
- 八种基本类型除了boolean类型以外,其他七种类型之间可以相互转化
转换规则:
1.默认转换
将取值范围小的的类型自动提升为取值范围大的类型
(byte,char,short(byte->short))->(int)->(long)->(float)->(double)
4个字节float比8个字节long取值范围要大
原因: 浮点数在存储时结构与整数计算方式不同
2.强制转换
容量大的转换为容量小的
格式 : (强制转换的类型) 变量名
int a =258;
byte b = (byte)a;
注:有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一 种数据类型,然后再进行计算会有精度损失
基本数据类型的包装类
Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面
向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设
计类时为每个基本数据类型设计了一个对应的类进表示,这样八个和基
本数据类型对应的类统称为包装类
基本数据类型 | 包装类(包裹类型) |
---|---|
byte | Byte |
short | Short |
char | Character |
int | I nteger |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
例如:Integer
声明
Integer a=new Integer(12);
Integer b=new Integer(10);
调用非静态方法
int compareTo();
boolean equals();
//调用非静态方法
System.out.println(a.compareTo(b));//前面大返回1,后面大返回-1,一样大返回0;
System.out.println(a.equals(b));//比较a与b内容是否相同 与"=="要区分 返回一个boolean类型
System.out.println(a==b);//比较a与b是否指向一个内容
//.....
调用静态方法
Integer valueOf
int compare(int a,int b)
Integer.parseInt(String str,int radix);
//调用静态方法
Integer c=Integer.valueOf(12);//调用静态方法,返回一个Integer类型变量给C
Integer d=Integer.valueOf("10");//调用静态方法,把字符串类型(必须是数字)转换为Integer返回一个Integer类型变量
Integer.parseInt(String str,int radix);//把radix进制对应的str转化为十进制
System.out.println(Integer.compare(13,10));//前面大返回1,后面大返回-1,一样大返回0;
System.out.println(Integer.max(13,10));//返回较大的数值
System.out.println(Integer.valueOf(10));//返回的是引用类型
装箱和拆箱
- 装箱:
将基本类型可以自动转换为包装类型
Integer a=10;//默认调用Integer.valueOf(a)把10转化为引用类型即Integer类型
- 拆箱:
将包装类型转化为基本类型
int c=a.intValue();//拆箱
int c=a;//自动拆箱
源码:
public static Integer valueOf(int i) {//low:-128;high:127
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
Integer a=10;//默认调用Integer.valueOf(a)
Integer a=10;
Integer b=10;
System.out.println(a.equals(b));//结果为true
System.out.println(a==b);//结果也为true
Integer c=128;
Integer d=128;
System.out.println(c==d);//结果为false
System.out.println(c.equals(d));//结果为true
由源代码可知,当在方法内部对 -128~127之间进行缓存(数组),在此期间的自动装箱,不会创建新的Integer对象,直接从中获得,(因为a与b传过去对应i的参数都为10,则返回的是同一个对象地址的引用),而超出此区间的每次都会返回新的对象(所以c和d虽然值相等但是返回的都是一个新的对象地址,所有c==d结果为false)
本文来自博客园,作者:Yang0710,转载请注明原文链接:https://www.cnblogs.com/cwyYYDS/p/18213003