`
ycysth
  • 浏览: 9572 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
阅读更多

对Java的基本类型,存储的是实际的值,而并非指向一个对象的引用,所以在赋值时,是直接将一个地方的内容复制到了另一个地方。

引用静态方法,在HelloData类中需要引用Print中的静态方法:

 

package net.mindview.util;

public class Print {
	public static void print(Object obj){
		System.out.println(obj);
	}
}

 

package com.test.tij4.operators;

// 该import表示引用Print类的静态方法
import static net.mindview.util.Print.*;

public class HelloDate {
	public static void main(String[] args){
		print("Hello");
	}
}
对于i++和++i,前者是先得值再自加,后者是先自加再得值,例:
public class AutoInc {

	public static void main(String[] args) {
		int i = 1;
		System.out.println(++i); // i先+1再打印,结果=2
		System.out.println(i++); // i先打印再+1,结果=2,但i的值已变为3
		System.out.println(i);	// 结果为3
		System.out.println(--i); // i先-1再打印,结果为2
		System.out.println(i--); // i先打印再-1,结果为2,但i的值已变为1
		System.out.println(i);	// 结果为1
	}
}
对于基本数据类型,可以直接使用=比较值;对于大部分Java类库,可以使用equals()方法来比较值;而对于其他自定义类,需要自行重写equals()方法。因为大部分Java类库,都重写了equals()方法,equals()默认比较的还是对象的引用,例:
class Value{
	int i;
}

public class EqualsMethod {
	public static void main(String[] args) {
		int i1 = 23;
		int i2 = 23;
		Integer n1 = new Integer(23);
		Integer n2 = new Integer(23);
		Value v1 = new Value();
		Value v2 = new Value();
		v1.i = v2.i = 23;
		System.out.println(i1 == i2); // 对于基本数据类型直接使用=比较值,结果为true
		System.out.println(n1 == n2); // 作为对象,=比较的是引用,结果为false
		System.out.println(n1.equals(n2)); // 大部分Java类库,equals被重写,比较的是值,结果为true
		System.out.println(v1.equals(v2)); // 由于Value类没有重写equals,默认equals比较的还是对象的引用,结果为false
	}
}
直接常量:long型在值后加l或L,float加f或F,double加d或D;十六进制以前缀0x或0X开头,后面跟0~9或大小写a-f表示;八进制以前缀0开头,后面跟0~7的数字表示。
指数计数法:如,float f = 1.39e-43f代表的是1.39x10的-43次方。对于定义float,有小数点后位数的,需要明确指出是单精度类型f,因为编译器会默认认为是double类型。
原码、反码、补码:反码是对原码的取反操作,补码是对反码+1操作,如:
int型整数5二进制表示为:00000000 00000000 00000000 00000101
原码:00000000 00000000 00000000 00000101
反码:11111111 11111111 11111111 11111010
补码:11111111 11111111 11111111 11111011
在计算机中表达负数即为补码,最高位表示正负,负数为1,反之为正数,所以5的补码即为-5的值。
按位操作符,即用来操作整数基本数据类型中的单个bit,即二进制的位。
  1. ~:按位求反,作用是将各个二进制位由1变成0,0变成1;
  2. &:按位与操作符,两个都为1时结果为1,否则为0,类似"且";
  3. | :按位或操作符,两个有一个或以上为1时结果为1,否则为0,类似"或";
  4. ^:按位异或运算符,两个不同则结果为1,否则为0。
移位操作符,操作对象也是二进制的bit,只可用来处理整数类型。
  1. <<:无符号左移位操作符,按操作符右侧指定的位数将操作符左边的操作数向左移动(低位补0);
  2. >>:有符号右移位操作符,按操作符右侧制定的位数将操作符左边的操作数向右移动,若符号位正,则在高位插入0,否则插入1;
  3. >>>,无符号右移位操作符(Java特有),功能同上,只是无论如何都在高位插入0。
public class BiteManipulation {

	public static void main(String[] args) {
		// 无符号左移
		System.out.println(7 << 8); // 将7的二进制111向左移动8位为11100000000,结果为1792
		int x = 7;
		x <<= 8;
		System.out.println(x); // 将7的二进制111向左移动8位为11100000000,结果为1792并将值赋给变量x
		
		// 有符号右移
		System.out.println(7 >> 2);// 将7的二进制111向右移动2位为1,结果为1
		/*
		 * 将-7的二进制11111111111111111111111111111001向右移动2位为xx111111111111111111111111111110
		 * 由于向右移是有符号的,-7为负数,高位补1,所以结果为11111111111111111111111111111110,即-2
		 */
		System.out.println(-7 >> 2);
		int y = 7;
		y >>= 2;
		System.out.println(y); // 将7的二进制111向右移动2位为1,结果为1并赋值给变量y
		
		// 无符号右移(Java特有)
		/*
		 * 将-7的二进制11111111111111111111111111111001向右移动2位为xx111111111111111111111111111110
		 * 由于是无符号右移,高位补0,所以结果为00111111111111111111111111111110,即1073741822
		 */
		System.out.println(-7 >>> 2);
	}
}
窄化转换(narrowing conversion),一种将能容纳更多信息的数据类型转换成无法容纳那么多信息的类型的转换;如将float型转换为int型。Java中默认的处理方式是将float数值的小数点后的数据直接舍弃,只保留整数值;如果想要得到四舍五入的结果,可以使用java.lang.Math中的round()方法。
在对不同数据类型做算术运算时,总是表达式中出现的最大的数据类型决定了最终结果的数据类型,如:一个float类型与double类型的值做运算,结果为double类型。



 

 

0
0
分享到:
评论

相关推荐

    Thinking in Java 中文第四版+习题答案

    第3章 控制程序流程 3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 ...

    Thinking in java4(中文高清版)-java的'圣经'

    2.8.2 语法 2.8.3 嵌入式HTML 2.8.4 一些标签示例 2.8.5 文档示例 2.9 编码风格 2.10 总结 2.11 练习 第3章 操作符 3.1 更简单的打印语句 3.2 使用Java操作符 3.3 优先级 3.4 赋值 3.4.1 方法调用中的别名问题 3.5 ...

    Thinking in Java简体中文(全)

    第3章 控制程序流程 3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 ...

    Thinking in java(中文)

    类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和...

    Thinking in Java第三版+第四版

    本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、Java I/O系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了...

    JAVA_Thinking in Java

    第3章 控制程序流程 3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 ...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    第3章 控制程序流程 3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 ...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    第3章 控制程序流程 3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 ...

    thinkinjava源码-Thinking-in-Java:ThinkingInJava源代码和练习题

    第3章 操作符 第4章 控制执行流程 第5章 初始化与清理(18年6月) 第6章 访问权限控制(18年6月) 第7章 复用类(18年6月) 第8章 多态(18年7月) 第9章 接口(18年10月) 第10章 内部类 第11章 持有对象 第12章 通过异常处理...

    java笔试题算法-Thinking-in-Java:《ThinkingInjava》-Note《Java编程思想》笔记作者:[美]Bruce

    java笔试题算法 README 《Java编程思想》笔记 ...第三章:操作符 java操作符 算术操作符 关系操作符 逻辑运算符 float 与 double 的区别 前缀式与后缀式的区别 测试对象的等价性 注意数值过界 第四章:控制流程 迭

Global site tag (gtag.js) - Google Analytics