本帖最后由 James112 于 2018-1-9 17:20 编辑
1.06
基本数据类型有8种:byte,short,int,long boolean float double char
其中定义long和float为什么要加L和F呢?不是会随着前面的变量类型自动转型吗?斌哥讲到这里我有点懵,查了一些资料明白了为什么。
整形默认值为int,如果定义long 必须要加L来区分,浮点型默认值为double双精度,定义单精度float要加F来区分。
long l1 = 10000000000L;(内存机制)
实际上内存中l1只是一个long类型的变量,它存在于向stack(栈)中,数值并不在其中存放,它指向heap(堆)中另一块真正存放数值的内存,加L的目的就是为了让heap中也创建一块long类型所需要的内存,用来来放数值。
所以说=前后两者其实是在不同的两块内存,只不过有个无形的指针将两者连接起来了。
long l1=12345678,l2=8888888888L; 这里12345678后面不需要加L,为什么?
类型自动转换
不添加尾缀也不会报错的情况
Java语言中,整数直接量(例如:1、2、10等),JVM虚拟机是默认为int类型数据的。所以,当整数直接量赋给long、float或者double,而不添加尾缀,虚拟机也会直接将int类型数据自动转换为对应类型然后赋值。因为数据长度短的转换为长的并不会造成数据丢失,所以默认可以自动转换。
例如:
long lNum = 5; //不报错,因为int自动转换为long类型,不会报错
float fNum = 7; //不报错,因为int自动转换为float类型,不会报错
double dNum = 10; //同上
但是,当浮点直接量(例如:1.2等),JVM虚拟机默认为double类型,如果直接赋值给float就会引起编译器报错。
float fNum = 1.2; //报错,因为1.2虚拟机是默认为double类型,不能直接赋值给float类型变量
float fNew = 1.3f;//正确,因为尾缀添加了f,即告诉了虚拟机1.3属于float类型变量
总结
所以,当Java中遇到这三种类型变量需要赋直接量时候,最好都添加上相应的尾缀。这样不仅会防止编译器报错,也会增加程序的可读性。
但是下面这种情况就算添加尾缀也是错的,因为尾缀仅是为了告诉虚拟机该直接数属于什么数据类型,而不能实现数据类型强制转换。
long lNum = 1.2L; //错误,double类型数据不能直接赋值给long类型
long lNew = (long)1.2; //正确,double类型数据强制转换为long类型
1.07
a++ :先运算后自增 ++a:先自增再参与运算.
m++=2 = (m=m+2) 前者有一个强制类型转换, 后者不具备.例如m为long类型的值,则后者编译出错.
1.09
今天学习了for循环嵌套语句,switch语句,写了九九乘法表.
"水仙花"那个题目,开始没想出怎么取一个数字的个位十位百位的值.于是用了一个很笨的方法,定义了三个变量 xyz分别代表三位数的个十百位,然后嵌套2次,遍历出0-999的值,
然后再判断(X*X*X+Y*Y*Y+Z*Z*Z)的值是否等于(X*100+Y*10+Z) ,结果听了斌哥的讲解,用/和%能很轻松的求出一个数的个十百位.......
猜数字小游戏代码:
import java.rmi.Naming;
import java.util.Random;
import java.util.Scanner;
public class demo6 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Random random= new Random();
int number = random.nextInt(100)+1;
Scanner scanner = new Scanner(System.in);
System.out.println("猜数字游戏启动");
int count = 0;
while(true){
System.out.println("开始猜数字");
int x = scanner.nextInt();
count++;
if(x>number){
System.out.println("您猜大了");
}
else if(x<number){System.out.println("您猜小了");}
else{System.out.println("您猜对了");
break;
}
}
}
}
九九乘法表代码:
public class demo5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int x;
int y;
for (x = 1; x < 10; x++) {
for (y = 1; y <= x; y++) {
System.out.print(y + "*" + x + "=" + x * y + " ");
if (x == y) {
System.out.println();
}
}
}
}
}
|
|