您的位置:

java里强制转换的小疑惑(java里强制转换的小疑惑是什么)

本文目录一览:

java强制转换的问题

1.由于a,b是int型而h是float型变量,a/b的结果也就是float型,假如想要进行相互赋值,就必须先把他们统一成同一类型的变量。

2.这里的“h=(float)a/b”是指:将整形变量a除以整形变量b的结果强制转化为float型,并将这个值赋给h,并不是申明,申明在前面已经有过了,不需要重复申明。强制转换都是这个格式而已:变量=(右边表达式或者变量要转换成的数据型)变量或者表达式;

3.在这里float是可以改成double的,由于double的数集包含了float,假如a/b的结果转换成double型但是仍在float型的范围内,就可以,假如超过了,就不行。

4.例如,char a='B' ;(这个变量a是char型的,值为'B')

byte c=(byte)a;(我们想把a的值赋给c,但是a为char型的,只好把a的数据型转化成

与 a一样的byte型来实现赋值了)、

写了一大堆,说的不是很清楚,希望能够帮到你,最好还是自己看看书上的例子,再去问问老师,估计你的收获会更大!

java的强制类型转换问题

因为object是一切类的父类,你将子类转换为父类,由于内存中子类对象的空间内包含父类的一切属性和方法,那么当你调用这些属性和方法的时候一定不会出问题。所以不需要强制转换。

但如果将父类转换为子类。这是很可能的。因为如果A有子类B和C。B子类有D。那么如果创建C对象声明为A是很正常的。但是如果将这个对象转换为B。JVM会认为你声明的与内存中的可能有冲突。那么这个风险就要由程序员来承担,这个时候就需要强转了。其实强转就是一个风险从JVM转移到程序员的过程。表名程序员知道并且承担了这个风险。因为一旦你创建B声明A。强转为C。调用C特有的方法时程序是会出错的。那么这个风险转移给了程序员承担。如果创建D,声明A。强转为B虚拟机他是不知道这个其实是没有风险的,所以也要程序员的承担。总体来说就是当你需要将父类转换为子类时需要强转。

在java中什么是强制类型转换!

1 ) 整数 int 转换成字串 String , 有三种方法 :

String s = String.valueOf(i);

String s = Integer.toString(i);

String s = "" + i;

2 ) String 转 int

int i = Integer.parseInt([String]);

i = Integer.parseInt([String],[int radix]);

int i = Integer.valueOf(my_str).intValue();

3 ) 布尔类型 转 String

1. 第一种方法

boolean bool = true;

String s = new Boolean(bool).toString();//将bool利用对象封装器转化为对象

2. 第二种方法

boolean bool = true;

String s = String.valueOf( bool );

4 ) String 转 Date

1 . 导入 java.util.Date date=null;

2 . date=java.sql.Date.valueOf(String s);

5 ) 数字类型间的转换

转型有两种: 向上转型和向下转型(强制转型)

两种分别如下:

第一种是向上转型

对于基础数据类型 , 可以自动转型 ,比如:

int a = 10;

long b = a;

这里就是把int型转成了long型 , 因为 long范围比int大 , 这样的转型不会有任何影响 , 所以可以自动转型

第二种是向下转型 , 也就是强制

这种需要强转 , 比如

long a = 10 ;

int b = (int) a;

通过 (int)可以强制转型 , 但是这样会丢失精度 , 比如a如果超过了b的范围 , 那么强转成int型, 只会等于int的最大值

又如 : int a = ( int ) 8.8 ;

如果对编程感兴趣可以来我这个看看,希望对您有所帮助!~

Java强制类型转换的疑惑

我们一般把java类型分为编译时类型与运行时类型。java程序运行后,对象的类型就不会发生改变。而强制类型转换只不过是用某种类型去引用内存中的实体,这种类型只是编译时类型,与运行后的实体并没有联系

菜鸟弱弱地问一个java强制转换的小问题?

double i = (int)65 * 0.1;是先把65转成int型,再*0.1,此时会把65再转成double型65.0 再*0.1,结果是6.5

double i = (int)65/10,同样先转65为整型,再/10,由于10是整数,所以65/10=6,取整,再赋值给double 型变量i,结果是6.0

java中的强制类型转换

在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换。

在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。因为子类拥有比父类更多的属性、更强的功能,所以父类转换为子类需要强制。那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的。

当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了。在Java中我们可以通过继承、向上转型的关系使用父类类型来引用它,这个时候我们是使用功能较弱的类型引用功能较强的对象,这是可行的。但是将功能较弱的类型强制转功能较强的对象时,就不一定可以行了。

举个例子来说明。比如系统中存在Father、Son两个对象。首先我们先构造一个Son对象,然后用一个Father类型变量引用它:

Father father = new Son();

在这里Son 对象实例被向上转型为father了,但是请注意这个Son对象实例在内存中的本质还是Son类型的,只不过它的能力临时被消弱了而已,如果我们想变强怎么办?将其对象类型还原!

Son son = (Son)father;

这条语句是可行的,其实father引用仍然是Father类型的,只不过是将它的能力加强了,将其加强后转交给son引用了,Son对象实例在son的变量的引用下,恢复真身,可以使用全部功能了。

前面提到父类强制转换成子类并不是总是成功,那么在什么情况下它会失效呢?当引用类型的真实身份是父类本身的类型时,强制类型转换就会产生错误。例如:

Father father = new Father();

Son son = (Son) father;

这个系统会抛出ClassCastException异常信息。

所以编译器在编译时只会检查类型之间是否存在继承关系,有则通过;而在运行时就会检查它的真实类型,是则通过,否则抛出ClassCastException异常。

所以在继承中,子类可以自动转型为父类,但是父类强制转换为子类时只有当引用类型真正的身份为子类时才会强制转换成功,否则失败。

扩展资料:

public class TestCastClassException

{

public static void main(String[] args)

{

Father father = new Son();

//这两句话是不对的,因为一个father类型的引用(指针)是看不见、看不到son中新定义的数据成员或者成员函数的

//虽然这个对象的本质是Son类型的,它也确实有这样的数据成员和成员函数,但是指针的作用范围不够,它看不到。

//代码后面附上模型分析

//father.son = 2;

//father.show_son();

father.show_father();

father.show();

Father father1 = (Father)father;//一个对象在内存中被new出来后,只能选择访问它的方式,不能修改它的布局(包含的成员的个数等)

father1.show();

} //main

}

class Father

{

public int father = 2;

Father(){}

void show()

{

System.out.println("This is father");

}

void show_father()

{

System.out.println("father!!");

}

}

class Son extends Father

{

public int son = 1;

Son(){}

void show()

{

System.out.println("This is son");

}

void show_son()

{

System.out.println("son!!");

}

}