Java的数据类型

在Java中,分为两大数据类型,分别是基本数据类型引用数据类型

对于基本数据类型,又分为八大基本数据类型:

整型,细分为四种:byte short int long

byte 8bit(1位符号位,7位数据位)

short 16bit(1位符号位,15位数据位)

int 32bit(1位符号位,31位数据位)

long 64bit(1位符号位,63位数据位)

浮点型,分为两种:float double

float 32bit(1位符号位,8位阶位(小数点存在的位置),23位数据位)

double 64bit(1位符号位,11位阶位(小数点存在的位置),52位数据位)

布尔类型(boolean)

boolean(布尔)类型有两个值:false和true,用来判断逻辑条件。

数值型和boolean之间不能直接转化。

字符型(char)

1.字符类型实际上是一个16位无符号整数,这个数对应字符的编码

2.java字符类型采用Unicode字符集编码。Unicode是世界通用的定字长字符集,所用字符都是16位

对于1的例子:

public static void main(String[] args) {
		char c1 = '中';
		char c2 = '\u4e2d';
		System.out.println(c1);
		System.out.println(c2);
	}
 //’4e2d‘为’中‘所对应的16位Unicode编码

输出结果:

任何一个字符都可以转化为一个整数,整数的范围是0-65535

	public static void main(String[] args) {
		int  a = '中';
		System.out.println(a);
	}

输出结果:

在字符型中,有一类情况需要注意:对于不方便输出的字符,如一些有特殊意义的符号,可以采用转义字符表示,如下:

public static void main(String[] args) {
		int num = 100;
		String json = "{"+"\"count\":"+num+"}";// /斜杠 \反斜杠
  		String dataString = "[{\"id\":\"1\" ,\"name\":\"张三\"},{\"id\":\"2\" ,\"name\":\"李四\"},{\"id\":\"3\" ,\"name\":\"王五\"}]";
		System.out.println(json);
}

在本例中“”有着本来双引号的意义,同时在我们输入字符串时也需要用到"",如果不使用转义字符,会被默认为输入字符串的双引号,在不对称匹配时就会报错。

下面是一些常用的转义字符:

----------------------------------------------------------------------------------------------------------------

转义字符 含义

\n 表示回车

\r 表示换行符

\\ 表示反斜杠( \ )

\' 表示单引号( ' )

\" 表示双引号( " )

---------------------------------------------------------------------------------------------------------------------

上面我们了解了Java的基本数据类型,下面我们再来看一下引用数据类型

Java引用数据类型:

在Java中,除了基本类型之外,其余的类型都属于引用数据类型。如我们的字符串类型String,它在内部存储一个“地址”,这个地址可以指向一个对象在内存中的位置。指向对象的变量就是引用变量,这些变量在声明时被指定为一个特定的类型,比如People、Person等。变量一旦声明后,其类型就不能被改变。

常用的引用数据类型有如下几种:

对于这些引用数据类型,与基本数据类型有着一些不同之处:

1.这些引用数据类型的默认值都为null

2.在存储位置上:基本数据类型变量保存的是值,具体内容是存储在中的。而引用数据类型变量保存的是地址,只要是引用数据类型变量,其具体内容都是存放在中的,而栈中存放的是其具体内容所在内存的地址。

在这里需要指出的是String类型的存储:

来看下面这段代码:

String a = "123";
String b = "123";
String c =new String("123");
System.out.println(a==b);
System.out.println(a==c);
System.out.println(b==c);

输出结果:true false false

我们都知道,==是来判断值是否相等,在上面了解到的String字符串类型应该都是指向他们的地址,那为何a,b的地址相同?而他们与c的地址不同?

这是因为,有一个叫做字符串常量池的东西

字符串常量池在JDK 7及之前的版本中位于方法区,而在JDK 7及之后的版本中位于堆区

      而在字符串常量池当中,存放着我们写入的字符串,为了节省内存,提高性能,我们通过代码中第一二行这种形式定义的字符串,都会存储到字符串常量池当中,并且,指向字符串常量池中的同一值,其中字符串常量池中的相同内容,为了节省内存空间会共享地址,当我们定义的String类型变量他的值存在于字符串常量池当中,他会直接指向那个值,如没有,会在字符串常量池中创建(除了特别声明,字符串常量池中字符串不重复)

这就很好的解释了为何a==b为何结果为true

那又为什么c又和a,b不同呢?

这是因为new这个关键字,创建了一个新的对象,开辟了一个新的内存空间,这个对象存放的字符串再指向123的内存地址,因此与a,b不同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值