java学习(3)

from: http://android.yaohuiji.com/archives/2765

 

Java基础第三讲:Java基本语法(二)

15 SEP

java_lesson03

本讲内容: 基本数据类型之间的转换、引用数据类型、字符串

一、基本数据类型之间的转换

所谓数据类型转换就是将变量从当前的数据类型转换为其它数据类型,类型转换在Java里是个很严肃的事情^_^ ,我们现在讲解基本数据类型之间的转换。

先搞定布尔类型,布尔类型无法和其它基本数据类型之间发生任何方式的转换。

数字型的基本数据类型之间可以通过下面两种方式实现转换。

1、自动类型转换

我们把所有的基本数据按照取值范围从小到大排个序,就得到了下图:
image

a、当把一个取值范围小的基本数据类型赋值给一个取值范围大的基本数据类型时,Java编译器会帮你完成类型转换。

b、还有一个秘密:“字面值的整数永远隐含着的意思是它是个int”,当把一个在byte允许的取值范围的int字面值赋予一个byte类型的变量时,编译器会自动帮你完成。

public class Lesson03_1{
	public static void main(String[] args){
		byte byte1=100;
		short short1=10000;
		char char1= 23002;
		int int1= 1000000;
		long long1= 9876543210L;
		float float1= 9876543210.12345f;
		double double1= 9876543210.123456789;

		short short2=byte1;
	//	byte byte2=short1;

	}
}



上面的例子中 byte能转换成short,short不能转换成byte,这就是自动类型转换,自动类型转换不会损失精度。那么现在的问题是上面的程序如果强行编译会怎么样,大家看下图:

image

看到没,编译器说了,把short转成byte可能会损失精度!那么把10000存入byte会的确会损失精度,那么把值是100的short类型数字存入byte肯定不会损失精度,那么编译器会怎么看待这件事情?我们问去采访一下它,改程序成这样:

public class Lesson03_2{
	public static void main(String[] args){
		short short1=100;
		byte byte1=short1;
	}
}


运行之后:

image

我们看到编译器并不买账,我们看到编译器只对整数字面值的大小有感知,对这种从大到小的类型转换是坚决不允许的,那么如何解决这个问题,就要用到后面讲的强制类型转换。

2、强制类型转换

我们把上面的程序再改一下:

public class Lesson03_2{
	public static void main(String[] args){
		short short1=100;
		byte byte1=(byte)short1;
		System.out.print(byte1);
	}
}


我们发现这一次成功了,加一个括号,里面写一上要转换的类型,就搞定了。强制类型转换果然很强!

强制类型转换的副作用也是有的,那就是的确可能导致精度丢失(数字不准确):

public class Lesson03_2{
	public static void main(String[] args){
		short short1=250;
		byte byte1=(byte)short1;
		System.out.print(byte1);
	}
}


这段代码的打印值是-6,我想这是大家都不愿意看到的情形。了解了强制类型转换的特点我们使用的时候就会特别留意,自然就不会出问题^_^。

二、引用数据类型(Reference Data Type)

和基本数据类型对应的就是引用数据类型,引用数据类型包括类应用、接口引用和数组引用。因为这三个东西大家还都没有学,所以这里只是让他们和大家见个面,混个脸熟,直接上代码:

import java.util.List;
public class Lesson03_3{

	//对象
	static Object object;
	//接口
	static List list =null;
	//数组
	static int[] months;

	public static void main(String[] args){
		System.out.println("object="+object);
		System.out.println("list="+list);
		System.out.println("months="+months);
	}
}


查看运行结果:

image

我们看到引用数据类型中接口和对象的类型名都是首字母大写的,数组是带有方括号的。他们和基本数据类型有着明显的不同。

用一句话来说就是基本数据类型变量里存储的是数据本身,而引用数据类型变量里存储的是指向数据本身的地址。

三、字符串初识

字符串是程序开发中最常用的一种对象。关于对象我们有过一点点的了解,关于字符串我们也先啊和他见见面,以后会慢慢熟悉起来的。下面我们用一个字符串来举例理解引用数据类型在内存中的存储情况:

public class Lesson03_4{
	public static void main(String[] args){
		String name1="nebulayao";
		String name2=null;
		name2=name1;
		System.out.println("name2="+name2);
	}
}


查看运行结果,打印的结果是 name2=nebulayao 。上述程序用图形来表示的话就是这样:

image

好了,本讲就到这里,take your time and enjoy it 。

哦,回来说一句,除了整数字面值的默认类型int以外,你是不是也自己发现了一个小秘密?那就是浮点数字面值的默认类型是double 。如果你不知道的话,做题会吃亏的^_^,出题人太坏了。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值