美文网首页
Java基础-与Js的一些差异总结

Java基础-与Js的一些差异总结

作者: 指尖轻敲 | 来源:发表于2018-11-03 20:32 被阅读16次

    作为一只写js的猿,上手java肯定会觉得它真的好繁琐。所以,一步一步来吧,菜鸟上路,从基础开始,各路大神多多指教。

    数据类型


    ''和""的区别

    在js中''""是没有什么区别的,基本上可以使用单引号的地方就可以用双引号代替,在没有模板字符串时进行字符串的拼接可能会把两者结合使用。
    但是在Java中,''里的内容是单个字符,属于char类型;而""则代表字符串,属于String类型。

    double和float

    double不是double kill的意思,float也不是浮动的意思。他们代表的是浮点型的小数。double是17位有效数字的双精度类型,比float的8位单精度类型更精准。
    默认情况下小数是double类型的,如果要用float需要在最后加上f。而double类型的d是可以省略的。

    double price=120.5;
    float height = 175.8f;
    

    自动类型转换和强制类型转换

    如果是从int转到double,或者从float转到double都是可以自动进行转换的。反之则则不行,也就是说从类型范围小的可以自动转换成类型范围大的。

    int age = 18;
    double age2 = age;
    System.out.println(ages); //18.0
    

    但是如果想反过来转换呢?这里就需要使用强制类型转换。使用强制类型转换可能会造成数据的丢失,需谨慎使用。(如下,小数点的5被直接截断)

    double height = 178.5;
    int height2 = (int)height;
    System.out.println(height2); //178 
    

    ==和===和equals()

    在js中==只判断值是否相等,如果要判断类型也相等就需要使用===。但是注意:在java中没有===只有==,==就已经判断了类型是否相等。
    而equals()方法是判断引用数据类型的,它判断的是引用的内存地址是否相等(即是否是同一个对象),而不是判断值。

    但是在学习过程中碰到了以下情况:

    String string1 = new String("字符串");
    String string2 = new String("字符串");
    System.out.println(string1.equals(string2)); //true
    

    不是说equals比较的是对象的内存地址吗?为什么两个不同的对象会相等呢?一开始我以为自己理解错了,后来发现原来String类重写了equals方法,判断存储的内容是否相等,所以返回true。

    String string = "字符串";
    String string2 = "字符串";
    

    如果是String string = "字符串"这样声明的两个相同的字符,其实是同一个,因为同一字符串出现多次java编译程序实际只创建了一个,所以string和string2指向的内存地址也一样。

    数组


    数组的声明

    int[] scores = { 89, 72, 64, 58, 93 };
    System.out.println(scores); //[89, 72, 64, 58, 93]
    String[][] names={{"tom","jack","mike"},{"zhangsan","lisi","wangwu"}};
    

    数组的遍历

    除了普通的for循环外,还可以用foreach来遍历数组。

    for ( int score : scores) {
      System.out.println(score);
    }
    

    如果只是取数组的每一个元素的话,这个方法比普通for循环方便很多,但是如果要是用的索引的话,该怎么办呢?可以通过定义一个自增变量来实现。

    int index = 0;
    for ( int score : scores) {
      System.out.println(index);
      index++;
    }
    

    数组常用方法

    在js中,数组常用的方法直接.方法名就可以了,但是Java中使用方法是需要提前导包的。

    import java.util.Arrays;
    public class HelloWorld {
        public static void main(String[] args) {
            int[] scores = { 89, 72, 64, 58, 93 };
            // 对Arrays类对数组进行排序
            Arrays.sort(scores);
            // 使用foreach遍历输出数组中的元素
            for ( int score : scores ) {
                System.out.println(score);
            }
        }
    }
    /*
    58
    64
    72
    89
    93
    

    方法


    方法的声明

    在js中定义一个方法之间function 方法名,完事。甚至在es6出来之后都可以使用箭头函数,function都不要写了。但是在Java中定义一个方法就没有这么干脆了。

    访问修饰符 返回值类型 方法名(参数) {}

    public void print() {
      System.out.println("Hello World");
    }
    

    Java中定义方法应该遵循以上结构,具体每部分的含义往下看:

    1、访问修饰符:该方法允许被访问的范围。public(任何位置)protected(本类、子类、同包下可以访问)不写(默认在本类、同包下可以访问)private(只能在本类中访问)

    2、 返回值类型:如果没有返回值,则类型指定为void,如果有返回值就指定为返回值的类型。

    3、方法名:合法的标识符。没有其他特殊之处

    4、参数:如果是多个参数则以逗号隔开。

    方法的调用

    在js中一个类中要调用方法,直接this.方法名就可以了,这里需要先创建实例对象。

    public class HelloWorld { 
        public static void main(String[] args) {
            // 创建对象,对象名为hello
            HelloWorld h = new HelloWorld();
            // 调用方法
            h.showMyLove();
        }
    
        /*
         * 定义无参无返回值的方法
         */
        public void showMyLove() {
            System.out.println("世界和平!");
        }
    }
    

    Java中main方法最先执行。

    方法的重载

    每一个知识点都要和js对比着来学习,这样可以记得更牢靠,而且对js的基础也能更扎实。
    在js中是没有方法重载的概念的,如果出现方法相同的情况,后声明的方法会直接把原有的方法覆盖掉。但是在Java中会根据以下情况判断方法重载:

    • 必须在同一个类中

    • 方法名相同

    • 参数的个数,位置,类型不同

    • 与修饰符或者返回值没有关系。

    满足这条件说明方法被重载了,调用时会通过参数的不同匹配调用不同的方法。而不会出现覆盖现象!

    相关文章

      网友评论

          本文标题:Java基础-与Js的一些差异总结

          本文链接:https://www.haomeiwen.com/subject/gcflxqtx.html