##################################################
目录
##################################################
数据类型转换
——————————
自动转换/隐式转换/由小转大/放大转换
例如 必须将一个小数与一个整数的变量相加!!?
不同类型的数据能运算吗?
如果一个操作数为 double 类型
则整个表达式提升为 double 类型
比如 int 和 double 类型相加 结果一定是 double 类型!
将一种类型的变量赋给另一种类型的变量时 就会发生自动类型转换
这就是隐式数据类型转换
自动数据类型转换
隐式数据类型转换
由小变大转换
例如:
int a = 100;
double b = a;
int 类型隐式子的转换成 double 类型变量
但是这种转换并不是永远无条件触发的
想要自动转换类型 需要满足的条件:
两种类型要兼容 例如数值类型整数类型和浮点型互相兼容
目标类型大于源类型 例如 double 类型比 int 变量类型分配的空间宽度足够储存 int 类型变量 因此 也可以把 int 转换 double 称之为放大转换
——————————
强制数据类型转换/大变小转换
将 double 类型赋给一个 int 变量类型
由于不能进行放大转换 只能强制转换
语法如下:
(数据类型)表达式
在变量面前加上括号 括号中的类型就是要强制转换成的类型!
例如:
double d = 3.1415926;
int b = (int)d; /* b = 3 */
##################################################
数值/字符/字符串 比较
——————————
数据初始值
在定义变量时 没有给属性赋初始值 所以是默认值
这就是默认值 Java 数据类型的默认值:
int 0
double 0.0
char '\u0000'
boolean false
String null
char 类型的
'\0'
'\u0000'
是一样的一样啦!
String 的 null 就是表示空 但并不等价于
" "
""
——————————
数值比较
我们知道了数值直接比较可以这样来判断相等不相等:
数值_1 == 数值_2
数值_1 != 数值_2
——————————
字符比较
char 的本质还是表示编码的数字
所以可以使用 == 或 != 来进行数值比较
——————————
字符串比较
%%%%%
equals 方法
字符串之间呢?
要判断相同不相同 使用 equals 方法
判断一个字符串变量是不是指定的值示例:
变量.equals("值")
例如 对比一下字符串变量 name 是不是 李恰恰:
name.equals("李恰恰")
另外 比较字符串 是不是空值:
字符串 == null
字符串 != null
字符串.equals("")
"".equals(字符串)
equals 方法返回值也是布尔值
true 表示相同 false 表示不同
其实是不推荐比较是否等于 null 来判断是否为空的
因为 例如:
String A = "";
这种情况下 虽然没有赋值 却会表示成
" "
A 虽然没有值 却也不等于 null
我们由此可以看出
==
这个符号 是用来判断路径是否相同
null 不就是空指针嘛!!?
所以我们要么声明变量后不赋值:
String A;
要么就赶紧赋一个初始值:
String A = "2333";
免去
""
" "
判断失误的情况!
%%%%%
isEmpty 方法
用法:
字符串.isEmpty()
这个 isEmpty() 是在 Java SE 6.0 才提供的
效果效率也是很棒的! 返回值也是布尔值
true/的确是空的 false/不为空
##################################################
获取字符串长度
——————————
length 方法
我们还可以得到字符串的长度 就是一共保存了几个字符 用法:
字符串.length()
返回一个 int 数值表示字符串长度
因为字符串就是字符数组嘛 就是获取里面的字符个数
长度为 0 则表示 变量中储存的字符串为空
——————————
循环遍历计数字符串长度
既然字符串都是数组 那么能不能遍历数组计数字符数呢?
诶你还别说 真的可以 只不过会发生异常
其实不处理异常也没关系 后面会給出处理异常和清楚异常显示的方法!
不处理异常:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
int k = 1;
String str;
Scanner sc = new Scanner ( System.in );
System.out.printf ( "请输入字符串 <<< " );
str = sc.nextLine();
for ( int i = 0; str.charAt(i) != '\0'; i ++, k ++ )
System.out.printf ( "[%d] >>> [%c]\n", k, str.charAt(i) );
System.out.printf ( "输入的字符串长度为 [%d]", (k - 1) );
}
}
执行结果:
C:\Users\byme\javaTest>javac test.java
C:\Users\byme\javaTest>java test
请输入字符串 <<< 我爱你
[1] >>> [我]
[2] >>> [爱]
[3] >>> [你]
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
ex out of range: 3
at java.lang.String.charAt(Unknown Source)
at test.main(test.java:14)
C:\Users\byme\javaTest>
——————————
数组越界访问异常处理以及清除异常报错方式
%%%%%
处理异常
code:
import java.util.Scanner;
import java.io.IOException; /* 导包 */
public class test {
public static void main(String[] args) {
int k = 1;
String str;
Scanner sc = new Scanner ( System.in );
System.out.printf ( "请输入字符串 <<< " );
str = sc.nextLine();
try {
for ( int i = 0, end = str.length(); ; i ++, k ++ ) {
/* end 是 str 的长度 这边为了处理异常用一下 length 没有循环条件 在循环体设置退出 */
if ( i >= end )
/* 如果越界就显示详细信息 */
throw new ArrayIndexOutOfBoundsException ( "\n\t***当前要访问下标为 [" + (i + 1) + "] 且数组长度为 [" + end + "] 发生数组越界异常***");
else
/* 没有越界 正常运行 */
if (str.charAt(i) == '\0')
/* 如果字符等于结束符就退出循环 */
break;
else
/* 取得字符不为空 输出下标和对应值 */
System.out.printf ( "[%d] >>> [%c]\n", k, str.charAt(i) );
}
} catch ( ArrayIndexOutOfBoundsException e ) {
System.out.println ("\n[发生异常]———————————————————————————————————");
System.out.println ( e.toString() );
} finally {
System.out.println ( "\n... 请处理越界异常!" );
System.out.println ("————————————————————————————————————————");
System.out.printf ( "输入的字符串长度为 [%d]", (k - 1) );
}
}
}
demo:
C:\Users\byme\javaTest>javac test.java
C:\Users\byme\javaTest>java test
请输入字符串 <<< abc123[]'/.!
[1] >>> [a]
[2] >>> [b]
[3] >>> [c]
[4] >>> [1]
[5] >>> [2]
[6] >>> [3]
[7] >>> [[]
[8] >>> []]
[9] >>> [']
[10] >>> [/]
[11] >>> [.]
[12] >>> [!]
[发生异常]———————————————————————————————————
java.lang.ArrayIndexOutOfBoundsException:
***当前要访问下标为 [13] 且数组长度为 [12] 发生数组越界异常***
... 请处理越界异常!
————————————————————————————————————————
输入的字符串长度为 [12]
C:\Users\byme\javaTest>java test
请输入字符串 <<< 崽崽喜欢你
[1] >>> [崽]
[2] >>> [崽]
[3] >>> [喜]
[4] >>> [欢]
[5] >>> [你]
[发生异常]———————————————————————————————————
java.lang.ArrayIndexOutOfBoundsException:
***当前要访问下标为 [6] 且数组长度为 [5] 发生数组越界异常***
... 请处理越界异常!
————————————————————————————————————————
输入的字符串长度为 [5]
C:\Users\byme\javaTest>
%%%%%
清除异常
code:
import java.util.Scanner;
import java.io.IOException;
public class test {
public static void main(String[] args) {
int k = 1;
String str;
Scanner sc = new Scanner ( System.in );
System.out.printf ( "请输入字符串 <<< " );
str = sc.nextLine();
try {
for ( int i = 0, end = str.length(); ; i ++, k ++ ) {
if ( i >= end )
throw new ArrayIndexOutOfBoundsException ();
else
if (str.charAt(i) == '\0')
break;
else
System.out.printf ( "[%d] >>> [%c]\n", k, str.charAt(i) );
}
} catch ( ArrayIndexOutOfBoundsException e ) {
} finally {
}
System.out.printf ( "输入的字符串长度为 [%d]", (k - 1) );
}
}
demo:
C:\Users\byme\javaTest>javac test.java
C:\Users\byme\javaTest>java test
请输入字符串 <<< 12345678910
[1] >>> [1]
[2] >>> [2]
[3] >>> [3]
[4] >>> [4]
[5] >>> [5]
[6] >>> [6]
[7] >>> [7]
[8] >>> [8]
[9] >>> [9]
[10] >>> [1]
[11] >>> [0]
输入的字符串长度为 [11]
C:\Users\byme\javaTest>
##################################################
程序示例
——————————
从键盘获取数据进行比较
从键盘获取分数
比较数据,输出结果
code:
import java.util.Scanner; /* 控制台输入 引入 java.util.Scanner 包 */
public class test {
public static void main(String[] args) {
int HeGe = 90; /* 合格分数 */
boolean yes;
Scanner input = new Scanner(System.in); /* Java 的一种输入方法 */
System.out.print("请输入您的成绩:"); /* 交互信息 */
int sc = input.nextInt(); /* 获取分数 储存在变量 */
yes = sc > HeGe ; /* 判断是否合格 */
/* 回显信息 */
if ( yes )
System.out.println ( "[YES]" );
else
System.out.println ( "[NO]" );
}
}
demo:
C:\Users\byme\javaTest>javac test.java
C:\Users\byme\javaTest>java test
请输入您的成绩:100
[YES]
C:\Users\byme\javaTest>java test
请输入您的成绩:90
[NO]
C:\Users\byme\javaTest>
——————————
测试:变量+表达式+输入输出+字符串处理
分别测试了:
null 空值 ==/equals 对比
字符串长度 length 判断
isEmpty 是不是空?
code:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print ( "A <<< " );
String A = input.next();
System.out.print ( "B <<< " );
String B = input.next();
System.out.print ( "C <<< " );
String C = input.next();
if ( A != null )
System.out.println ( "A 不为空\tA >>> " + A );
if ( ! B.equals(null) )
System.out.println ( "B 不为空\tB >>> " + B );
if ( ! C.isEmpty() ) {
System.out.println ( "C 不为空\tC >>> " + C );
if ( (A.length() > B.length()) && (A.length() != 0) && (B.length() != 0) )
System.out.println ( "A > B \t\tA >>> " + A );
else if ( (A.length() < B.length()) && (A.length() != 0) && (B.length() != 0) )
System.out.println ( "A < B \t\tB >>> " + B );
}
}
}
demo:
C:\Users\byme\javaTest>javac test.java
C:\Users\byme\javaTest>java test
A <<< 2
B <<< 23
C <<< 233
A 不为空 A >>> 2
B 不为空 B >>> 23
C 不为空 C >>> 233
A < B B >>> 23
C:\Users\byme\javaTest>java test
A <<< 233
B <<< 23
C <<< 2
A 不为空 A >>> 233
B 不为空 B >>> 23
C 不为空 C >>> 2
A > B A >>> 233
C:\Users\byme\javaTest>java test
A <<< 2
B <<< 233
C <<< 23
A 不为空 A >>> 2
B 不为空 B >>> 233
C 不为空 C >>> 23
A < B B >>> 233
C:\Users\byme\javaTest>java test
A <<< 233
B <<< 2
C <<< 23
A 不为空 A >>> 233
B 不为空 B >>> 2
C 不为空 C >>> 23
A > B A >>> 233
C:\Users\byme\javaTest>
如果你想挑战一下自己 可以加一个判断是否相等的 if 分支
##################################################
深入理解字符串比较
——————————
一个稍微复杂的程序 小白勿看!!!
以前 我心里是有点看不起那些使用诸如像
A == null
这样用 相等运算符和空值 搭配使用的
直到 我看到了这种测试方法返回值的用法
关于这个程序不用深入 看看就好
当然 如果你能现在就学会调用自己的方法或者能看懂一点方法的使用 我会很欣慰的!
code:
public class test {
public static void nullPoint_1() {
/* 这样声明的方法 我们不调用 就不会执行 系统只认 main 方法! */
String test = null;
try {
if ( test.equals( null ) )
System.out.println ( "test is null !" );
} catch ( NullPointerException e ) {
System.out.println ( "test.equals(null) >>> [" + e + "]" );
}
}
public static void nullPoint_2() {
String test = null;
try {
if ( test.length() == 0 )
System.out.println ( "test is null !" );
} catch ( NullPointerException e ) {
System.out.println ( "test.length() == 0 >>> [" + e + "]" );
}
}
public static void nullPoint_3() {
String test = null;
try {
if ( test.isEmpty() ) {
System.out.println ( "test is null !" );
}
} catch ( NullPointerException e ) {
System.out.println ( "test.isEmpty() >>> [" + e + "]" );
}
}
public static void nullPoint_4() {
String test = null;
try {
if ( test.equals("") ) {
System.out.println ( "test is null !" );
}
} catch ( NullPointerException e ) {
System.out.println ( "test.equals(\"\") >>> [" + e + "]" );
}
}
public static void error_1() {
String test = null;
if ( "".equals( test ) )
System.out.println ( "test = null, \"\".equals(test) >>> true" );
else
System.out.println ( "test = null, \"\".equals(test) >>> false" );
}
public static void error_2() {
String test = null;
if ( test == "" ) {
System.out.println ( "test = null, test == \"\" >>> true" );
} else {
System.out.println ( "test = null, test == \"\" >>> false" );
}
}
public static void right_1() {
String test = null;
if ( test == null )
System.out.println ( "test = null, test == null >>> true" );
}
public static void right_2() {
String test = "not null";
if ( test.equals( null ) )
System.out.println ( "test is null" );
if ( test.length() <= 0 )
System.out.println ( "test is null" );
if ( test.isEmpty() )
System.out.println ( "test is null" );
if ( test == null )
System.out.println ( "test is null" );
if ( test != null && !test.isEmpty() && test.length() > 0 && ! test.equals( null ) )
System.out.println ( "test >>> " + test );
}
public static void right_3() {
String test = "";
if ( test.equals( "" ) && test == "" ) {
System.out.println ( "test = \"\"" );
}
}
public static void main(String[] args) {
/* 程序从这里开始 */
/* 挨个调用 语法格式:
* 类名.方法名(参数列表);
*/
test.nullPoint_1 ();
nullPoint_2 (); /* 因为在同一个类中 所以可以直接调用 */
nullPoint_3 ();
test.nullPoint_4 ();
error_1 ();
test.error_2 ();
right_1 ();
test.right_2 ();
test.right_3 ();
}
}
demo:
C:\Users\byme\javaTest>javac test.java
C:\Users\byme\javaTest>java test
test.equals(null) >>> [java.lang.NullPointerException]
test.length() == 0 >>> [java.lang.NullPointerException]
test.isEmpty() >>> [java.lang.NullPointerException]
test.equals("") >>> [java.lang.NullPointerException]
test = null, "".equals(test) >>> false
test = null, test == "" >>> false
test = null, test == null >>> true
test >>> not null
test = ""
C:\Users\byme\javaTest>
可以看到 当字符串为 null 时用这三个方法都会抛出异常:
equals()
length()
isEmpty()
而与这种空值
""
进行比较时,会出现判断失误 所以可以使用
if ( test == null )
来判断,简单直接!
注意当这种字符串空值时:
""
与 null 不同,不是空指针
得与
" "
比较
字符串为空