Tag: 转换

Java将int隐式转换为byte

我即将开始处理需要读取字节和创建字符串的事情。 正在读取的字节代表UTF-16字符串。 所以只是为了测试我想要将UTF-16编码的简单字节数组转换为字符串。 数组中的前2个字节必须表示字节序,因此必须是0xff 0xfe或0xfe 0xff。 所以我尝试按如下方式创建我的字节数组: byte[] bytes = new byte[] {0xff, 0xfe, 0x52, 0x00, 0x6F, 0x00}; 但是我收到一个错误,因为0xFF和0xFE太大而无法放入一个字节(因为字节是用Java签名的)。 更准确地说,错误是int无法转换为字节。 我知道我可以使用强制转换显式地从int转换为byte并获得所需的结果,但这不是我的问题。 为了尝试一些东西,我创建了一个String并调用了getBytes(“UTF-16”)然后打印了数组中的每个字节。 输出有点令人困惑,因为前两个字节是0xFFFFFFFE 0xFFFFFFFF,后跟0x00 0x52 0x00 0x6F。 (显然这里的字节顺序与我上面尝试创建的不同,但这并不重要)。 使用此输出我决定尝试以相同的方式创建我的字节数组: byte[] bytes = new byte[] {0xffffffff, 0xfffffffe, 0x52, 0x00, 0x6F, 0x00}; 奇怪的是,它工作得很好。 所以我的问题是,为什么Java允许0xFFFFFF80或更大的整数值自动转换为没有显式强制转换的字节,但任何等于或大于0x80的东西都需要显式强制转换?

在Java中使用short,int,long,double,float进行转换

据我所知,当您使用Java中的算术运算在两个这些类型之间进行转换时,例如double + int,结果将是更大的类型(在本示例中,结果将是double)。 在对相同大小的2种类型进行算术运算时会发生什么? int + float和long + double会给出什么? 因为int和float每个都是4个字节,而long和double是8个字节。

arrays的水平变换(2D)

水平和/或垂直翻转图像很简单。 前提是给定一个通过导入图片创建的2D整数数组,我必须创建一个带有int [] []参数的方法,并在返回void之前将其水平翻转。 语法如下: public static void horizontalFlip(int[][] imgArray) { int temp; for (int i = 0; i < imgArray.length; i++) { for (int j = 0; j < imgArray[i].length / 2; j++) { temp = imgArray[i][j]; imgArray[i][j] = imgArray[imgArray.length – 1 – i][j]; imgArray[imgArray.length – 1 – i][j] = temp; } } } […]

OpenCV getPerspectiveTransform和warpPerspective Java

我目前有一个ArrayList ,它存储图像的轮廓,并检索出最大的轮廓,这是我的warpPerspective的目标。 List contours = new ArrayList(); Imgproc.findContours(matOut, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE); sort(contours); MatOfPoint2f m2f = MatOfPoint2f(contours.get(0).toArray()); double arc = Imgproc.arcLength(m2f, true); MatOfPoint2f approx = new MatOfPoint2f(); Imgproc.approxPolyDP(m2f, approx, arc*0.02, true); 我在如何使用getPerspectiveTransform然后应用warpPerspective来更改图像以使其适合450×450图像时遇到问题。 我在python中找到了一个相当不错的例子,但是我对它不是很熟悉有人可以解释一下我将如何在java中进行纠正? def rectify(h): ”’ this function put vertices of square we got, in clockwise order ”’ h = h.reshape((4,2)) hnew = np.zeros((4,2),dtype […]

铸造后目标对象采用什么类?

好的,noob问题。 我正在为SCJP学习并得到3个关于对象引用错误的问题,这似乎都表明了同样的误解。 只想确认正确的见解应该是什么。 对,这是问题: 1。 1.类CodeWalkFour { 2. public static void main(String [] args){ 3. Car c = new Lexus(); 4. System.out.print(c.speedUp(30)+“”); 5.雷克萨斯l =新雷克萨斯(); 6. System.out.print(l.speedUp(30,40,50)); 7.} 8.} 9.车级{ 10. private int i = 0; 11. int speedUp(int x){ 12.返回i; 13.} 14.} 15.雷克萨斯扩展汽车{ 16. private int j = 1; 17. private int k = 2; […]

发送Object类型的对象而不是String – Polymorphism

我有一个现有的方法,如下所示: public void parseMessage(String message){ … … … } 并通过调用它来调用该方法,如下所示 String message; parseMessage(message); 我需要修改它以处理新类型的消息。 从parseMessage方法调用的新类型消息的解析器在解析消息之前首先需要一些属性。 我在想做的是将消息作为一个看起来像这样的对象传递 public class MessageObject{ private String message; private String namespace; private String xmlVersion; } 然后我可以将现有方法称为 Object messageObject; parseMessage(messageObject); 然后,我可以通过将其作为(MessageObject)messageObject进行转换来使用它。 这是正确的做法,还是有更好的方法。 做上述事情有危险吗? PS。 我必须使用上面的转换方法作为im使用JDK1.4 谢谢 更新 我无法修改parseMessage方法。 它内部有一个调用,它为每个相关的解析器调用parse()方法。 public void parseMessage(String message){ … … parser.parse(message) } 上面显示的解析器引用是实现接口“Parser”的对象。 我正在介绍的新解析器遵循这种结构,它还实现了“Parser”接口。 唯一的修改(即对MessageObject的转换)在新的解析器中。 我无法更改现有的parseMethod,因为这将需要更改实现“Parser”接口的所有现有解析器。 我想避免根据消息类型调用特定的解析器。 […]

在进行通用转换时,在generics方法中捕获ClassCastException

假设我有一个方法 @SuppressWarnings(“unchecked”) public T getNumber() { try { return (T)number; } catch (ClassCastException e) { return null; } } 假设number是Integer一个实例,调用方法就像 Float f = getNumber(); 结果成为ClassCastException 。 我知道(不知何故)这是因为类型擦除,但有人可以提供更深刻的解释为什么exception升级到赋值级别并且不能在方法内捕获? 注意:我确实有版本public T getNumber(Class classT) ,它检查public T getNumber(Class classT)中的类型,但希望摆脱传递classT并停止想知道上述问题。

在Java中使用long转换为byte

我无法理解以下内容: 在java中, long l = 130L; byte b = (byte)l; 如果我打印b的值,为什么我得到-126? 长l的位代表是什么?

为什么自动装箱在arrays中不起作用?

我不明白为什么这段代码没有编译: Object[] arr = new int[3]; 我不需要这段代码。 我只是想了解自动装箱在这种情况下不起作用的原因 ?

在Java中键入cast into byte

我是Java的初学者。 我遇到了一个名为Type Casting的概念。 我有以下片段 – class Demo { byte b; int a=257; double d= 323.142 b=(byte)a; System.out.println(b); b=(byte)d; System.out.println(b); } 代码的输出是-167 任何人都可以向我解释输出。 提前致谢!