黑马程序员技术交流社区

标题: 正在看for循环嵌套乘法表,发现一个小细节 [打印本页]

作者: syb012    时间: 2015-10-18 16:15
标题: 正在看for循环嵌套乘法表,发现一个小细节
字符串连接符号+后面如果接的是加法符号+,则从左往右运算,加法符号变成字符串连接符号。想计算加法必须加括号提高运算优先顺序
而字符串连接符号+后面如果接的是乘法符号*,则优先计算乘法,不需要加括号。(另外如果把前面两项用括号扩起来通过代码验证可得程序错误,因为字符串不可参与加减乘除取模运算)




BiJiao1.png (94.93 KB, 下载次数: 47)

BiJiao1.png

作者: syb012    时间: 2015-10-18 16:18
错误程序

BiJiao2.png (102.4 KB, 下载次数: 37)

错误程序

错误程序

作者: jlq    时间: 2015-10-18 17:07
就是这样的
作者: syb012    时间: 2015-10-18 17:52
jlq 发表于 2015-10-18 17:07
就是这样的


作者: litoper    时间: 2015-10-18 18:10
Y带了双引号,将其他几个数字也强制转换成了字符串,所以不能进行运算,而是是简单的连接.因而%提示错误
作者: syb012    时间: 2015-10-18 20:13
litoper 发表于 2015-10-18 18:10
Y带了双引号,将其他几个数字也强制转换成了字符串,所以不能进行运算,而是是简单的连接.因而%提示错误 ...

看运行结果,第二个数据类型并没有被强制转换,仍然还是int整型。
作者: syb012    时间: 2015-10-18 20:36
litoper 发表于 2015-10-18 18:10
Y带了双引号,将其他几个数字也强制转换成了字符串,所以不能进行运算,而是是简单的连接.因而%提示错误 ...

在JAVA表达式中,如果进行运算的几个变量类型不一致,JAVA表达式会采取类型自动提升的操作。Java定义如下的自动提升规则:
  1. 所有byte型、short型和char型将被提升到int型。
  2. 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的等级排列如下图所示,位于箭头右边类型的等级高于位于箭头左边类型的等级。以下是java表达式中类型提升等级。


类型转换.jpg (44.03 KB, 下载次数: 43)

类型转换.jpg

作者: 迷途老马    时间: 2015-10-18 20:39
66666666666666666666
作者: syb012    时间: 2015-10-18 20:45
litoper 发表于 2015-10-18 18:10
Y带了双引号,将其他几个数字也强制转换成了字符串,所以不能进行运算,而是是简单的连接.因而%提示错误 ...

JAVA中int、String的类型转换    (转载自神秘小猪的博客
int -> String
int i=12345;
String s="";
第一种方法:s=i+"";
第二种方法:s=String.valueOf(i);
这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢?
String -> int
s="12345";
int i;
第一种方法:i=Integer.parseInt(s);
第二种方法:i=Integer.valueOf(s).intValue();
这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢?
以下是答案:


第一种方法:s=i+"";   //会产生两个String对象
第二种方法:s=String.valueOf(i); //直接使用String类的静态方法,只产生一个对象
第一种方法:i=Integer.parseInt(s);//直接使用静态方法,不会产生多余的对象,但会抛出异常
第二种方法:i=Integer.valueOf(s).intValue();//Integer.valueOf(s) 相当于 new Integer(Integer.parseInt(s)),也会抛异常,但会多产生一个对象


1如何将字串 String 转换成整数 int?

A. 有两个方法:

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

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

注: 字串转成 Double, Float, Long 的方法大同小异.

2 如何将整数 int 转换成字串 String ?

A. 有叁种方法:

1.) String s = String.valueOf(i);

2.) String s = Integer.toString(i);

3.) String s = "" + i;

注: Double, Float, Long 转成字串的方法大同小异.



JAVA数据类型转换

这是一个例子,说的是JAVA中数据数型的转换.供大家学习

package shenmixiaozhu;
import java.sql.Date;
public class TypeChange {
   public TypeChange() {
   }
   //change the string type to the int type
   public static   int stringToInt(String intstr)
   {
     Integer integer;
     integer = Integer.valueOf(intstr);
     return integer.intValue();
   }
   //change int type to the string type
   public static String intToString(int value)
   {
     Integer integer = new Integer(value);
     return integer.toString();
   }
   //change the string type to the float type
   public static   float stringToFloat(String floatstr)
   {
     Float floatee;
     floatee = Float.valueOf(floatstr);
     return floatee.floatValue();
   }
   //change the float type to the string type
   public static String floatToString(float value)
   {
     Float floatee = new Float(value);
     return floatee.toString();
   }
   //change the string type to the sqlDate type
   public static java.sql.Date stringToDate(String dateStr)
   {
     return   java.sql.Date.valueOf(dateStr);
   }
   //change the sqlDate type to the string type
   public static String dateToString(java.sql.Date datee)
   {
     return datee.toString();
   }

   public static void main(String[] args)
   {
     java.sql.Date day ;
     day = TypeChange.stringToDate("2003-11-3");
     String strday = TypeChange.dateToString(day);
     System.out.println(strday);
   }

}

JAVA中常用数据类型转换函数
虽然都能在JAVA API中找到,整理一下做个备份。



作者: QiChen    时间: 2015-10-18 20:46
额…这个我竟无言以对………
作者: syb012    时间: 2015-10-18 20:49
迷途老马 发表于 2015-10-18 20:39
66666666666666666666


作者: syb012    时间: 2015-10-18 20:50
QiChen 发表于 2015-10-18 20:46
额…这个我竟无言以对………


作者: JYcainiao    时间: 2015-10-18 21:46
很好很强大   说的很详细  都是很基本的内容   要记牢固才行啊
作者: syb012    时间: 2015-10-18 22:14
JYcainiao 发表于 2015-10-18 21:46
很好很强大   说的很详细  都是很基本的内容   要记牢固才行啊


作者: feng_ye    时间: 2015-10-18 22:27
y带""是字符串
作者: litoper    时间: 2015-10-18 23:22
syb012 发表于 2015-10-18 20:45
JAVA中int、String的类型转换    (转载自神秘小猪的博客)

---------------------------------------------------------------------------------------------------------------
litoper 发表于 2015-10-18 18:10
Y带了双引号,将其他几个数字也强制转换成了字符串,所以不能进行运算,而是是简单的连接.因而%提示错误 ...
--------------------------------------------------------------------------------------------------------------
1,简单理解,+这个符号在运算里面叫加,在字符串之间叫连接.
2,前面三个,因"Y"是字符串,所以后面的数字被强制转化为字符串,进而再连接到Y后面去了.
3.字符串理解成汉字,五是数字,汉字取模数字?或汉字取模汉字.
5,既已报错,为何转换?若被转换,何来报错?


作者: syb012    时间: 2015-10-19 08:12
litoper 发表于 2015-10-18 23:22
-------------------------------------------------------------------------------------------------- ...

这个地方我等有机会问问老师,看老师怎么说
作者: syb012    时间: 2015-10-19 08:34
litoper 发表于 2015-10-18 23:22
-------------------------------------------------------------------------------------------------- ...

字符串后接减乘除取模运算是否会把后面的int型强制转化成字符串类型?这么写出来的代码肯定是错误的。计算机是通过什么样的方式来判断错误,在判断错误的过程里是否有把整形强制转化成字符串型的这个过程,通过运行的错误结果不能很肯定的给出结论。但这个强制转化这个过程也是需要运算的,浪费资源,我认为设计Java 程序的人不会做强制转化这样一个多余的步骤,只要用乘法一边接字符串判断错误即可。但是否是这样,我还要等以后有机会再求证一下。
作者: zzy1990    时间: 2015-10-19 09:12
谢谢分享
作者: jyf823691221    时间: 2015-10-19 09:15
加油加油加油加油加油加油
作者: syb012    时间: 2015-10-19 10:34
litoper 发表于 2015-10-18 23:22
-------------------------------------------------------------------------------------------------- ...

正在看第4天第一个关于数组的视频,里面老师说到,编译过程不运行只检查语法错误,所以编译过程中出现错误一定是语法错误。所以肯定没有把int整型转换成字符串型这样的过程。
作者: syb012    时间: 2015-10-19 10:37
zzy1990 发表于 2015-10-19 09:12
谢谢分享


作者: syb012    时间: 2015-10-19 10:38
jyf823691221 发表于 2015-10-19 09:15
加油加油加油加油加油加油

一起加油
作者: 斑点狗    时间: 2015-10-19 10:50
LZ写的真心不错,看完挺有感触的!
作者: syb012    时间: 2015-10-19 11:34
斑点狗 发表于 2015-10-19 10:50
LZ写的真心不错,看完挺有感触的!


作者: syb012    时间: 2015-10-19 11:40
虽然知道一直深究一个小问题有点浪费时间,可是还是很好奇java的报错方式,所以又回顾了一下byte=byte+byte这样的语句是如何报错的


从图片可以看到是在编译过程中出现的错误,而编译过程是不运行的,只检查语法错误,也就是说java并没有运算图中的a+b,
而是把它作为一个整体当作了int型

BaoCuo1.png (81.21 KB, 下载次数: 30)

BaoCuo1.png

作者: ln0491    时间: 2015-10-19 12:00
学习了。。。。。。。
作者: syb012    时间: 2015-10-19 14:20
ln0491 发表于 2015-10-19 12:00
学习了。。。。。。。

一起学习^ _ ^
作者: syb012    时间: 2015-10-19 14:38
总结一下:
字符串取模int型,这是一个语法错误,java并没有把int型看作字符串型,而是通过取模运算的操作类型中有字符串而判断错误。

byte型+byte型 ,这没有语法错误,但java把它当作一个整体看作了int型
byte型=int型(假设是个不知道具体数值的变量),这是一个语法错误,int型不是一个具体的数不会进行自动区间查找,会报出可能丢失精度的错误

最后:
我要放下这件小事,我要去认真的学习关于数组的知识了,今天计划把数组全部学完。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2