A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© James112 初级黑马   /  2018-1-7 17:01  /  1206 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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();
                                       
                                }
                        }

                }
        }
}




5 个回复

倒序浏览
继续努力哦
回复 使用道具 举报
温故而知新   加油  
回复 使用道具 举报
总结不错,继续加油哟~~~
回复 使用道具 举报

期待继续更新~~~
回复 使用道具 举报
继续努力,加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马