首页 > 代码库 > java学习笔记

java学习笔记

1       java数据类型的转换

Java中可以进行不同数据类型的加减乘除运算吗?是可以的。在算术运算符中已经体验过如果两个整数(int)相除会去掉小数部分。如果需要保留小数部分,可以让除数或者被除数变为double类型的(5变为5.0)。其实Java是自动的将int的那个数变为了double类型了也就是Java自动的将整数变为了浮点数。例如5/2.0 其实是5.0/2.0

 

1、 自动类型转换(也叫隐式类型转换)

    可以将一个数赋值给更大数值范围的变量,例如可以经byte 变量赋值给short变量可以将short变量赋值给int变量可以将int变量赋值给long变量。

Java内部其实做了工作就是自动将数值进行了类型提升,就叫做自动类型转换(也叫隐式类型转换)

byte b = 1; //00000001

       short s = b;  //00000000 00000001

       int i = s;

       long lon = i;

       double d = lon; //1.0

 

自动类型转换(也叫隐式类型转换)

要实现自动类型的转换,需要满足两个条件,第一两种类型彼此兼容,第二目标类型取

值范围必须大于源类型。所有的数字类型,包括整形和浮点型彼此都可以进行转换。

 

例如:

byte b=100;

       int x=b;

       System.out.println(x);//程序把b结果自动转换为int类型。

 

2、 强制类型转换(也叫显式类型转换)

不可以将一个数值赋给范围更小数值范围的变量,除非进行类型转换。

byte b = 100;

       b = b + 2;

       System.out.println(b);

上述例子发生了什么,发生了类型转换。

b+2 遇到了加法运算,2默认是int类型,byte类型b变量存储的值自动类型提升为

了int类型。执行完加法运算后的结果就是int类型,想要将int的类型值放入到byte类型变量b中,无法放入,编译报错。

 

byte b=1;

       b=(byte)(b+2);

 

当两种类型彼此不兼容,或者目标类型取值范围小于源类型(目标是byte源是int)

无法自动转换,此时就需要进行强制类型转换。

1、 什么时候要用强制类型转换

   比如小数部分只想保留整数部分.

   一定要清楚要转换的数据在转换后数据的范围内否则会损失精度.

public static void main(String[] args) {

       byte b = 100;

       b = (byte) (b + 2);

       System.out.println(b); // 102

        //舍弃小数部分

        double d=5.5;

       int num=(int)d;

}

 

2、 表达式的数据类型自动提升

算术表达式,逻辑表达式                                   

所有的byte型、short型和char的值将被提升到int型。

如果一个操作数是long型,计算结果就是long型;

如果一个操作数是float型,计算结果就是float型;

如果一个操作数是double型,计算结果就是double型。

分析 System.out.println(‘a’+1)结果?

自动类型提升

  

byte b = 3;

       int x = 4;

       x = x + b;// b会自动提升为int 类型参与运算。

       System.out.println(x);// 7

 

 

强制类型转换

 

byte b = 2;

       /*

        * 强制类型转换,强制将b+2强制转换为byte类型,再赋值给b

        */

       b = (byte) (b + 2);

       System.out.println(b);// 4

思考1

byte  b=126;

问:既然数据默认的有数据类型,那么126 默认是int类型的,为什么存储到byte类型时不会报错呢。

126 是常量java在编译时期会检查该常量(每个常量)是否超出byte类型的范围。如果没有可以赋值。

思考2:byte b=128;能否正常的编译和运行。

该语句会出现编译错误,128超出了byte变量的存储范围,所以出现编译错误。

 

文档注释用/** */表示,是java特有的注释,其中注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。

java中byte变量的范围是  -128~127


Math.random()是指令系统默认随机选取大于等于 0.0 且小于 1.0 的伪随机 double 值,是Java语言常用代码。



int i=(int)(Math.random()*21); 


Scanner的基本使用:


Scanner 被称为输入流扫描器类,从控制台读取数据的 String nextLine() 从控制台返回一行,忽略空格。

int: nextInt() 从控制台返回一个 int 型数据,如果时间格式不对将抛出。java.util.InputMismatchException。 long: nextLong() 从控制台返回一个 long 型数据,如果时间格式不对将抛出java.util.InputMismatchException。 float: nextFloat() 从控制台返回一个 float 型数据,如果时间格式不对将抛出java.util.InputMismatchException。 double: nextDouble() 从控制台返回一个 double 型数据,如果时间格式不对将抛出java.util.InputMismatchException。 boolean: hasNext() 判断输入流还有没有下一个数据 ,
首先要好导入包:import java.util.Scanner;或者java.util.*



java.util是一个包名,java.util.*代表该包内的所有类
例子:

 1   import java.util.Scanner;
 2  public class TextScanner{
 3   public static void main(String [] args){
 4 //创建Scanner对象 接受从控制台输入
 5  Scanner input = new Scanner(System.in);
 6  System.out.println("请输入名字:");
 7  //接受String型
 8  String name = input.next();//注意不是nextString()
 9 System.out.println("请输入学号");
10   //接受int型
11  int id = input.nextInt();//什么类型next后面就接什么 注意大小写
12   //输出结果
13  System.out.println("名字为:"+name+"\t学号为:"+id);
14    }
15  }

 


 



java学习笔记