java中的类型转换

原创 2004年06月16日 15:21:00

??? 一天看了o'relly的书,突然之间有一种莫名其妙的冲动,自己也相当一名

技术作家。
??? 技术作家自然要技术过硬才行,然而自己的技术实在是无法入得了高手之列

。唯有自己多加练习、勤奋读书才能实现这一远大的理想。
??? 这次发表文章也就是为了试试自己能不能行,如果某位专家实在看不过去我

在这里胡说八道,您可以指正批评(最好给在下留一点面子,不要把我说的一文

不值)。
??? 如果写一些极为简单的问题我想不会有多少人看,在这里就坎一坎java中的

类型转换好了,这个论题看似很基础,但我想你也会从中有所收获的。
??? 要说类型转换,首先要说一说java的数据类型。java中的数据类型分为两种

:基本类型、引用类型。基本数据类型没有什么好说的byte char short int

long float double boolean,这些类型除了boolean之外,其他的与C语言中的类

型没有太大的区别。因为这篇文章的论题是类型转换,所以在此不讨论boolean

值的用法。
??? 下面要说的是引用类型。引用在有的书里也叫做句柄,它很类似C/C++中的

指针,但要注意引用和指针并不是同一个概念。指针是一个存放地址的变量,他

使C/C++程序员能够灵活地访问内存,但这也给程序的安全性带来了很大的隐患

,由于程序员可以对指针随意的运算操作,所以一不留神就会破坏其他的存储单

位,导致程序中出现意想不到的结果。引用继承了指针节省内存的优点,又限制

了对地址的操作,所以他是安全的。引用类型包括所有类生成的实例和数组(不

管是对象数组还是基本类型数组都实现Cloneable接口,所以他也是一个对象实

例),所有引用类型都继承自Object这个类。要说明一点的是java中的所有变量

都是一个引用,不管是引用类型还是基本类型。
??? 现在要正式讨论类型的转换了。用过C/C++的人对基本类型的转换都会很清

楚,基本类型转换分为类型提升和强制转换。
例如:
?int a=100;
?long

b=a+100;//这个地方就用到了类型提升,a+100从int提升到了long
?a=(int)b;//这个地方用到了强制转换
强制类型转换在某种情况下会丢失精度,如:
?byte b;
?int a=200;
?

b=(byte)a;//虽然这里用到了强制转换,但因为byte的范围是-127到127
??? //所以强制转换后宽度会被截短
在java中除了这些转换之外基本数据类型还可以被隐式的转换成String,例如:
?System.out.print("转换"+100);//如果在数据前面有字符串用+连接
???????? //就会隐式的转换成String
??? 引用类型的转换实现起来要比C++简单的多,如果一个对象与另一个对象没

有任何的继承关系,那么他们就不能进行类型转换。如果要把一个派生类对象赋

值给基类对象这个称为上溯造型。如果要把基类对象赋值给派生类对象就需要强

制类型转换,这称为下溯造型,下溯造型有一些危险,要安全的进行下溯造型有

一个前题,基类对象必须是从派生类对象中上溯过来的。
例如:
class Base{}
class Child extends Base{
?public static void main(String[] args){
??Base base=new Child();//上溯造型
??Child child=(Child)base;//下溯造型
??Child child1=(Child)new

Base();//抛出ClassCastException异常
?}
}
??? 最后,谈一谈String与引用类型的转换。前面已经说过,所有的对象都是从

Object继承过来的,Object中有一个toString方法。这个方法是所有的对象都可

以转换成String,如果想把自定义的类转换成String,最安全的做法是重写toStr

ing方法。和基本类型一样如果对象前有String对象用+连接,对象就会隐式转换

成String,这种情况实际上是隐式调用了toString方法。
??? 在此,所有关于类型转换的话题都说完了,这是我的首篇文章,希望大家喜

欢。
??????2004.6.15
?

@ 符号 在java中是什么语法 代表什么

java中@是什么     J2SE 提供的最后一个批注是 @SuppressWarnings。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。     一点背景:...
  • skyboy11yk
  • skyboy11yk
  • 2013年10月12日 16:49
  • 38773

关于java中<T>问题

关于java中问题 Jdk5.0新特性Generic Types (泛型) 原文 来源: 中国IT实验室 作者: 未知 责编: 宝良 1. 介绍 2.定义简单Java泛型 其实Java...
  • zhengqiqiqinqin
  • zhengqiqiqinqin
  • 2013年05月31日 19:22
  • 35831

Java中布尔类型操作&=,|=与^=的使用

今天在对同事的代码进行code review的时候,见到一个比较好玩的写法。“flag &= false;”,乍一看,还感觉他写错了,但是程序可以正常运行,赶紧去百度,看一下这个写法到底是怎么一回事,...
  • ziwen00
  • ziwen00
  • 2014年10月31日 16:35
  • 17997

java中==与equel的区别

值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。     ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
  • hellokatewj
  • hellokatewj
  • 2014年03月26日 17:43
  • 2840

java this 3种常见用法 详解

this 关键字 1.区分成员变量和局部变量 2.代表当前对象 3.构造器之间调用
  • u012176204
  • u012176204
  • 2017年01月17日 09:41
  • 3100

【数据结构】之二叉树的java实现

二叉树的定义: 二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。...
  • wuwenxiang91322
  • wuwenxiang91322
  • 2013年10月02日 09:28
  • 80338

Java可以做什么及可以给我们带来什么?

一般来说,Java是一个功能强大的软件平台。一套完整的Java平台将会给你带来如下特性: 开发工具箱:...
  • stewen_001
  • stewen_001
  • 2014年03月12日 16:06
  • 2905

Java 进度条控件的使用

利用JProcessBar类可以实现一个进度条,它本身不过是一个矩形控件,通过填充它的部分或全部来指示一个任务的执行情况,可以放置到一个新的线程中运行。 示例如下:...
  • kehyuanyu
  • kehyuanyu
  • 2014年05月19日 17:44
  • 8691

最小堆和最大堆的JAVA实现

/** * 文件名:BinaryHeap.java * 时间:2014年11月3日下午7:15:34 * 作者:修维康 */ package chapter6; import java.ut...
  • xiuweikang
  • xiuweikang
  • 2014年11月04日 16:37
  • 4438

java事务处理全解析

最近学习java事务,看到一位前辈的系列博客不错,转载过来作为记录 转载地址:http://www.davenkin.me/post/2013-02-16/40048284001    (一)Ja...
  • huilangeliuxin
  • huilangeliuxin
  • 2015年02月03日 10:26
  • 55435
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中的类型转换
举报原因:
原因补充:

(最多只允许输入30个字)