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.14e23.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

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号