java注意的一些细节问题

1. 大括弧作用域问题

public static void main(String[] args) {
    {
        int x;
        {
            int x;//编译错误:Duplicate local variable x
        }
    }
}

2.boolean值的运算

public static void main(String[] args) {
    if(true && false) {}
    if(true & false) {}
    System.out.println(true & false);
    System.out.println(true ^ false);
    System.out.println(true | false);
}

false
true
true

 

3.continue label 和 break label

public static void main(String[] args) {
    label:
    for(int i=0; i<2; ++i){
        System.out.println("i=" + i);
        for(int j=0; j<3; ++j){
            if(j == 1){
                //continue;
                //break;
                //continue label;
                break label;
            }
            System.out.println("   j=" + j);
        }
    }
}

  这个例子中,continue label和break具有同样的作用。

public static void main(String[] args) {
    label:
    for(int k=0; k<2; ++k){
        System.out.println("k=" + k);
        for(int i=0; i<2; ++i){
            System.out.println("    i=" + i);
            for(int j=0; j<3; ++j){
                if(j == 1){
                    //break;
                    continue label;
                }
                System.out.println("        j=" + j);
            }
        }
    }
}

  这个例子就更加直观的看到 continue label实现不一样的效果!

4.基本类型和对应对象分别做参数的函数重载

class A{
    public void fun(int x){
        System.out.println("int 重载");
    }

    public void fun(Integer x){
        System.out.println("Integer 重载");
    }
}

public class Main{

    public static void main(String[] args) {
         A a = new A();
         int x = 1;
         Integer ix = 1;
         a.fun(x);
         a.fun(ix);
    }
}

int 重载
Integer 重载

时间: 2024-10-16 22:05:57

java注意的一些细节问题的相关文章

java中变量运算细节 (2)

/* 目的:测试变量的运算方式 结果:byte a, b, c; a = b+c; 或者 a = b+10 形如这种形式的算式, 等式的右边的运算结果默认的都是int型的!因为等式右边有变量, 编译器无法确定变量的内容 ,因为它是变量!所以相加之后得到的int再默认强制转换成byte可能会损失精度. 而形如 a=4+5:这种常量的赋值,虽然 4 和 5 都默认的是int, 但都是常量,它们的值是确定的!所以如果 4+5的值超过了 byte的最大值的范围, 那就会编译出错!(也就是等式右边都是常量

java se的那些细节

局部变量:方法体内或语句块内,不能有修饰符 成员变量:与类的对象共存,可以有修饰符 类属性:与类共存,可以有修饰符 一.局部变量:必须先赋值,才能使用,如果不赋初值,则会报错,即没有默认的始使值,而基本数据类型的类属性或成员变量则不会,他们通过编译以后被赋与默认值. 程序1: public class Test{    public static void main(String[] args){        float f;        System.out.println(f);   

Java中的小细节

1.访问权限 1.private 只有本类才能被访问 2.default(默认)只有本包中才能被访问 3.protected只有子类和本包才能被访问,可以跨包. 4.public 可以在所有类中被访问 2.Java命名规范 1.类.所有单词首字母大写 2.方法.第一个单词的首字母小写 3.属性.第一个单词的首字母小写 4.包名.所有单词小写 5.常量.所有单词的字母大写.final定义的 Java中的小细节,码迷,mamicode.com

Java和C++在细节上的差异(转)

Java的基本程序结构.关键字.操作符都和C/C++非常相似,以下为主要的几点区别: 一.基本程序设计结构: Java的基本程序结构.关键字.操作符都和C/C++非常相似,以下为主要的几点区别: 1. Java的原始数值型数据类型中不包含无符号类型,如c中的unsigned int. 2. 在进行移位运算时,当向左边移动时,如1 << 35, 对于int类型,由于其占有4个bytes(32bits), 因此在Java中,大于32的移位将对32取模,即1 << 35的结果等于1 &l

Java中String类型细节

Java中String类型细节 一 . String两种初始化方式 1 . String str1= "abc";//String类特有的创建字符对象的方式,更高效 在字符串缓冲区中检测"abc"是否存在 若存在则不重复创建,将地址赋值给str1. 若不存在,则在字符串缓冲区中创建对象并赋地址给str1. 2 . String str1= new String( "abc"); //构造函数初始化  或者  char [] ch={'a','b'

Java创建线程的细节分析

转载:http://shmilyaw-hotmail-com.iteye.com/blog/1880902 前言 关于线程创建的问题,可以说是老生常谈了.在刚开始学习Thread的时候基本上都会接触到,用简单的一两句话就可以概括起来.一个是创建类实现Runnable接口,然后将该类的实例作为参数传入到Thread构造函数中.再调用Thread对象的start方法.还有一种是继承Thread类,覆写run方法.然后在该对象实例中调用start方法.那么,这两种方式在什么情况下适用呢?还有,既然我们

Java String 字符串类细节探秘

一. 字符串基本知识要点 字符串类型String是Java中最常用的引用类型. 二. String的==和equals方法 三. 几个关于String的程序分析

java集合的实现细节--ArrayList和LinkedList

 ArrayList和LinkedList的实现差异 List代表一种线性表的数据结构,ArrayList则是一种顺序存储的线性表,ArrayList底层采用动态数组的形式保存每一个集合元素,LinkedList则是一种链式存储的线性表,其本质上就是一个双向链表,它不仅实现了List接口,还实现了Deque接口,Deque代表了一种双端队列,既具有队列(FIFO)的特性,也具有栈(FILO)的特性,也就是说,LinkedList既可以当成双向链表使用,也可以当成队列使用,还可以当成栈来使用. p

Java学习之琐碎细节杂记

1.如何在Java中设置输入快捷方式? 例如:写代码时输入syso的话,就能够自动弹出System.out.println(); 方法:在Eclipse下打开windows-->preferences,找到java-->Editor-->Content Assisit,然后在右边的界面有一个Auto Activation.将Auto activation triggers for Java:后面填上26个字母,外加.(原点)和@这两个符号,然后save即可.

学习java浮点型的一些细节

出自<Java深入解析>的例子 例1.先看一段代码: public static void main(String[] args) { double d1 = 0.1; double d2 = 0.2; System.out.println("" + d1 + "+" + d2 + "=" + (d1 + d2)); } 初学者可能脱口而出执行的结果是输出 d1+d2=0.3.但是结果却没有这么简单: 0.1+0.2=0.300000