java中的类型转换

原创 2004年09月20日 12:26: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,最安全的做法是重写toString方法。和基本类型一样如果对象前有String对象用+连接,对象就会隐式转换成String,这种情况实际上是隐式调用了toString方法。
    在此,所有关于类型转换的话题都说完了,这是我的首篇文章,希望大家喜欢。

Java中的向上类型转换和向下类型转换

一、向上转型。 通俗地讲即是将子类对象转为父类对象。此处父类对象可以是接口。 1,向上转型中的方法调用。 看下面代码: [java] view plain ...
  • dongdong0071
  • dongdong0071
  • 2016年05月03日 13:08
  • 4647

java的自动类型转换和强制类型转换

一、自动类型转换 在 Java 程序中,不同的基本数据类型的数据之间经常需要进行相互转换。例如: , 代码中 int 型变量 score1 可以直接为 double 型变量 sc...
  • sunflower_csdn
  • sunflower_csdn
  • 2015年05月18日 19:08
  • 1890

Java类型强制转换

1.背景       在Java中,之所以需要强制类型转换是为了防止程序员在不知情的情况下把A类型数据错当成B类型的数据。将一种类型的值赋给另一个类型的变量是很常见的,如果这两种是兼容的,那么J...
  • CZengze
  • CZengze
  • 2016年10月31日 00:50
  • 6994

Java —— 对象类型转换和instanceof函数

说实话真的挺绕的。。。 /* * * 一个子类对象的类型可以向上转换成父类类型,即子类对象可以当作父类对象使用 * 这种转换是安全的,叫做自动类型转换 * 而一个父类对象类型一般是...
  • sxtopc
  • sxtopc
  • 2017年03月20日 17:19
  • 432

JAVA中的变量,自动类型转换

一直以来对变量的理解比较模糊,今天来扫扫盲。 变量的概念: 1.内存中的一个存储区域 2.改区域有自己的名称(变量名)和类型(数据类型) 3.该区域的数据可以在同一类型范围内不断变化 为什么...
  • a909301740
  • a909301740
  • 2016年08月01日 13:30
  • 1174

Java数据类型的转换:隐式(自动)转换与强制转换

原文链接:http://java.chinaitlab.com/base/725590.html 一些初学JAVA的朋友可能会遇到JAVA的数据类型之间转换的苦恼,例如,整数和float,doubl...
  • u011240877
  • u011240877
  • 2015年08月17日 10:09
  • 10088

JAVA的基本类型及自动转换问题

java提供了一组基本数据类型,包括 boolean, byte, char, short,  int, long, float, double, void.  同时,java也提供了这些...
  • rebornsgundam
  • rebornsgundam
  • 2016年12月31日 12:18
  • 1578

JAVA中基本的类型转换(如String转Int)

在Integer.parseInt();String->int 将字符串参数作为有符号的十进制整数进行解析。除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ( '\u002D') 外,...
  • sinat_20259781
  • sinat_20259781
  • 2016年07月25日 16:17
  • 4989

java中显示类型转换和隐式类型转换

在定义变量时,有许多要注意的问题,一不小心就会出现损失精度或者不兼容类型等问题。 例如:     1.定义长整型数据时,必须加后缀l或L               long l =123456...
  • liu1pan2min3
  • liu1pan2min3
  • 2015年09月06日 22:11
  • 2917

Java中的equals和强制类型转换

java中的equals和强制类型转换
  • jinhuoxingkong
  • jinhuoxingkong
  • 2016年05月29日 12:58
  • 1002
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中的类型转换
举报原因:
原因补充:

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