------- android培训、java培训、期待与您交流! ----------
数据类型
Java中数据类型包含两大类:
基本类型(primitivetypes)
基本类型直接包含值,每种基本类型所占存储空间是固定的,它们的大小并不像其他大多数语言那样随着机器硬件架构的变化而变化,这使得java语言相对于其他语言来说可移植性更强。
引用类型(referencetypes)
引用类型引用对象,对象内封装着各种数据。基本数据类型和引用数据类型之间具有一定的关系,通过基本数据类型包装类可以将基本数据类型转换成对象来操作。
基本类型 | 大小 | 最小值 | 最大值 | 包装器类型 |
boolean | - | - | - | Boolean |
char | 16-bits | Unicode 0 | Unicode 216-1 | Character |
byte | 8-bits | -128 | +127 | Byte |
short | 16-bits | -215 | +215-1 | Short |
int | 32-bits | -231 | +231-1 | Integer |
long | 64-bits | -263 | +263-1 | Long |
float | 32-bits | IEEE754标准 | IEEE754标准 | Float |
double | 64-bits | IEEE754标准 | IEEE754标准 | Double |
基本数据类型对象包装类的最常用方式就是基本数据类型和字符串类型之间做转换
基本数据类型转成字符串
1.基本数据类型用双引号例如“123”
2.包装器类型.toString(基本数据类型值)如:Integer.toString(34);//将34整数转成“34”
字符串转成基本数据类型
1. parseInt(String s);将字符串转成整数
在java 5.0之后出现对基本数据类型进行隐式拆箱、装箱功能,大大方便了代码书写。
class IntegerDemo
{
public static void main(String[] args)
{
Integer x=new Integer(4);//新特性之前的基本数据类型通过包装类转成对象
Integer x=4;//x为引用类型变量指向对象,此处4为对象,具有隐式装箱也即4=new Integer(4)
x=x+2;//此处为隐式对象拆箱,虽然方便了书写,但是代码健壮性受到影响,可能导致空指针异常
}
}
编码、解码
计算机处理数据和我们人类处理数据方式是不同的,人类通过自己的感官来认识世界,通过语言、图像来表达我们的感受。计算机不一样,它们只能识别电路的开和关,想要计算机帮人类处理数据首先让其读懂我们的语言,这其中就涉及到编码、解码。
计算机一系列的开关动作记录下来演变为二进制数据,二进制通过进制转换变成八进制、十进制、十六进制。
class StringDemo
{
public static void main(String[] args)
{
sop(Integer.toBinaryString(6));//将十进制的6转成二进制
sop(Integer.toHexString(30));//将十进制的30转成十六进制
sop(Integer.toOctalString(30));//将十进制的30转成八进制
sop(("将十六进制的30转成十进制:"+Integer.parseInt("30",16)));//将十六进制的30转成十进制
sop(("将八进制的30转成十进制:"+Integer.parseInt("30",8)));//将八进制的30转成十进制
sop(("将二进制1111001101转成十进制:"+Integer.parseInt("1111001101",2)));//将二进制的1111001101转成十进制
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
二进制通过编码表与人类文字关联,由于世界上各个国家民族之间语言的多样性,也就有了各种各样的编码表。我们常用的码表为GBK(中国标准编码表)、UTF-8(世界通用编码表为Unicode的一种实现方式)。
编码:字符串变成字节数组 str.getBytes(charsetName)
解码:字节数组变成字符串 new String(byte[] charsetName)
解码用错码表,可以再用该错码表进行编码,之后再用正确码表解就能得出
正确结果。注意错码表和正确码表之间没有交集才行。
import java.util.*;
class EncodeDemo
{
public static void main(String[] args)throws Exception
{
String s="你好";
byte[] b1=s.getBytes("gbk");//将字符串通过gpk编码
System.out.println("你好gbk编码:"+Arrays.toString(b1));//输出编码
String s2=new String(b1,"iso8859-1");//错误解码
System.out.println("错误解码,iso8859-1:"+s2);//输出错误解码
byte[] b2=s2.getBytes("iso8859-1");//将乱码用错码表再编码
System.out.println("乱码再编码:"+Arrays.toString(b2));
String s3=new String(b2,"gbk");
System.out.println("正确解码,gbk:"+s3);
}
}