Tag: 转换

Java:d​​ouble vs float

在另一个Bruce Eckel练习中,我编写的代码采用了一种方法,并在另一个类中更改了值。 这是我的代码: class Big { float b; } public class PassObject { static void f(Letter y) { yc = ‘z’; } //end f() static void g(Big z) { zb = 2.2; } public static void main(String[] args ) { Big t = new Big(); tb = 5.6; System.out.println(“1: tb : ” + tb); g(x); […]

如何“动态”将Object类型的实例强制转换为其特定的数据类型?

public Object foo(int opt){ if (opt == 0) return new String(); else if (opt == 1) return new Integer(1); else if (opt == 2) return new Double(1); else if … .. and many more } public void doSomething(String s){..} public void doSomething(Integer i){..} public void doSomething(Double d){..} … and many more doSomething method public static […]

java:将二进制字符串转换为int

我正在尝试将几个二进制字符串转换回int。 但它没有转换我的所有二进制字符串,留下了java.lang.NumberFormatExceptionexception。 这是我的测试代码,带有3个二进制字符串: public class Bin { public static void main(String argvs[]) { String binaryString ; binaryString = Integer.toBinaryString(~0); //binaryString = Integer.toBinaryString(~1); //binaryString = “1010” ; int base = 2; int decimal = Integer.parseInt(binaryString, base); System.out.println(“INPUT=” + binaryString + ” decimal=” + decimal) ; } } 如果我转换“1010”它的效果很好,但是当我尝试转换其他两个中的一个时,我得到了exception。 有人能解释一下为什么会这样吗? 干杯

对象类型转换的性能

Object Typecasting在性能方面有多昂贵? 我应该尽可能避免使用Typecasting吗?

Java – 具有相同方法的不同对象的数组

我正在练习inheritance。 我有两个类似的类,我想要同化为一个数组,所以我想使用Object类作为超类,因为所有东西都是Object的子级。 所以,例如我将T类和CT类放入一个名为all的数组中: Object all[] = new Object[6]; all[0] = T1; all[1] = CT2; all[2] =T3; all[3] = CT1; all[4] = T2; all[5] = CT3; 我跳过了声明,因为那不是我的问题。 当我希望使用循环调用数组中的函数时,我的真正问题就变成了: for (int i = 0; i < 6; i++) { all[i].beingShot(randomNum, randomNum, AK47.getAccuracy()); } 分别涉及T和CT的类都有areShot方法,这是公开的。 Eclipse建议将它们作为快速修复。 我想知道除了创建我自己的持有beingShot方法的Object类,或者将其添加到Object类之外是否有任何逻辑替代方法,尽管我觉得这些选择中的任何一个都会在长期内导致更多问题。 谢谢!

Java:将类转换为不相关的接口

显然,这会导致编译错误,因为Chair与Cat无关: class Chair {} class Cat {} class Test { public static void main(String[] args) { Chair chair = new Char(); Cat cat = new Cat(); chair = (Chair)cat; //compile error } } 那么为什么我在运行时只将Cat引用转换为不相关的接口Furniture时才会出现exception,而编译器显然可以告诉Cat不实现Furniture? interface Furniture {} class Test { public static void main(String[] args) { Furniture f; Cat cat = new Cat(); f = […]

使用自定义类加载器中的javax.tools.ToolProvider?

似乎不可能使用Ant或Webstart所需的自定义类加载器中的javax.tools.ToolProvider : http ://bugs.sun.com/view_bug.do?video_id = 6548428 javax.tools.ToolProvider.getSystemJavaCompiler()将javax.tools.JavaCompiler加载到URLClassLoader中,其父级是系统类加载器。 API似乎不允许用户指定父类加载器。 如何从自定义类加载器中使用javax.tools.JavaCompiler ? 例如: Ant加载MyParserTask MyParserTask解析Java源代码 AntClassLoader由委托给系统类加载器的AntClassLoader加载 javax.tools.JavaCompiler由URLClassLoader加载,代理到系统类加载器 稍后, MyParserTask调用: javax.tools.CompilationTask task = compiler.getTask(…); com.sun.source.util.JavacTask javacTask = (com.sun.source.util.JavacTask) task; javacTask.parse().next().accept(visitor, unused); // parsing happens here 看到这两个类如何驻留在不同的类加载器上, JavacTask没有办法在不获取ClassCastException错误的情况下与JavacTask进行交互。 有任何想法吗?

Java – 为什么char会被隐式地转换为byte(和short)原语,而不应该?

编译器的某些function让我感到困惑(使用Eclipse的Oracle JDK 1.7)。 所以我有这本书说char原语需要明确地转换为short和byte,这一切都有意义,因为数据类型的允许范围不重叠。 换句话说,下面的代码可以工作(但如果没有显式类型转换,则无法工作): char c = ‘&’; byte b = (byte)c; short s = (short)c; 正确打印b或s会显示数字38,这是Unicode中(&)的数字等效值。 这让我想到了我的实际问题。 为什么以下工作也一样? byte bc = ‘&’; short sc = ‘&’; System.out.println(bc); // Correctly displays number 38 on the console System.out.println(sc); // Correctly displays number 38 on the console 现在我肯定会理解以下内容(也适用): byte bt = (byte)’&’; System.out.println(bt); // Correctly displays […]

使用类型转换添加字节Java

我试图在字节数组中添加两个值。 这是我的代码: byte[] ars = {3,6,9,2,4}; ars[0] = (byte)ars[0] + (byte)ars[4]; System.out.println( ars[0] ); 我在编译时遇到这个错误: Main.java:9: possible loss of precision found : int required: byte ars[0] = (byte)ars[0] + (byte)ars[4]; ^ 1 error 任何帮助,一如既往,非常感谢。

java优化nitpick:在投射之前调用instanceof进行检查是否更快投出一些东西并让它抛出exception?

在任何人说什么之前我只是出于好奇而问这个问题; 我不打算根据这个答案进行任何过早的优化。 我的问题是关于使用reflection和铸造的速度。 标准的说法是“反思很慢”。 我的问题是哪个部分确实很慢,为什么; 特别是在比较某事物是否是另一个实例的父母时。 我非常有信心只是将一个对象的类与另一个Class对象进行比较的速度与任何比较一样快,大概只是直接比较已经存储在Object状态中的单例对象; 但如果一个class级是另一个class级的父母呢? 我通常认为instanceof与普通类检查一样快,但今天我想到了它,似乎有些reflection必须在“幕后”发生才能工作。 我在网上查了一下,发现有人说instanceof很慢; 大概是因为比较物体的父母所需的reflection? 这导致了下一个问题,即仅仅是铸造。 如果我将某些东西作为对象投射,那么我不会得到ClassCastException 。 但是,如果将对象转换为自身的父对象,则不会发生这种情况。 基本上我正在做一个调用的instanceof ,或者当我在运行时进行演员时,我正在做这个效果的逻辑吗? 我从来没有听到过任何人暗示过投射物体之前可能会很慢。 不可否认,并非所有演员都是提供对象的父级,但很多演员都是父类。 然而,从来没有人暗示这可能会很慢。 那是哪个呢。 真的不是那么慢吗? instanceof和cast都是父类慢吗? 或者是否有某种原因可以比调用instanceof更快地完成演员表?