Java基本数据类型和引用数据类型的编程练习1(含全代码、详细注释和执行结果截图)
执行结果截图:
======================================================================================================
代码如下:
public class Demo02 {
public static void main(String[] args) {
String name = "汤姆·克鲁斯";
int kill = 99;
String title = "‘一竿走天涯’";
//使用格式化输出
//%s表示字符串,%d表示数字,%n表示换行
String sentenceFormat ="%s 在进行了连续 %d 次野钓以后,获得了 %s 的称号%n%n"; //定义格式化字符串sentenceFormat
System.out.printf(sentenceFormat,name,kill,title); //打印格式化字符串变量sentenceFormat,name、kill、title依次对应该字符串内容里的%s、%d、%s
//注意:println是自带换行的
//注意:输出字符串变量的值的话,不需要双引号
float b1 = 1.1F;
double c1 = 3.14159_2653589793_238462643383279_5028841971693993751058209749445923078164062862089986280348253421170679;
String show_b1_output = "b1="+b1;
System.out.println(show_b1_output); //打印字符串变量show_b1_output的内容
String show_c1_output = "c1="+c1;
System.out.println(show_c1_output); //打印字符串变量show_c1_output的内容,能发现圆周率小数点后100位的值被截为了double数据类型的最大长度范围
System.out.println("abc"); //打印字符串abc
String cde = "cde"; //定义字符串变量cde,并赋值“cde”
System.out.println("abc" + cde); //打印字符串abc,紧跟着打印字符串变量cde的值
String d = "abc".substring(1,3);
//定义字符串变量d,并赋值为字符串abc的内容的子集。子集起始位置为字符串变量d的第(1+1)个字符,结束为第3个字符
String e = cde.substring(2,3);
//定义字符串变量e,并赋值为字符串变量cde的内容的子集。子集起始位置为字符串变量e的第(2+1)个字符,结束为第3个字符
System.out.println(d); //打印字符串变量d
System.out.println(e); //打印字符串变量e
System.out.println("========================================================"); //打印一条分隔线(便于阅读程序运行结果)
//数据类型转换
int i1=1;
int i2=010; //八进制————逢八进一
int i3=0xF;//十六进制,0xF代表15
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
float f1 = 0.1f; //float类型的0.1
double d1 = 1/10; //double类型的0.1
System.out.println(f1==d1); //可以发现(f1==d1)的判断结果应该是false,因此最好避免完全使用浮点数进行比较
float f2 = 123456789f;
float f3 = f2+1;
System.out.println(f2==f3); //可以发现(f2==f3)的判断结果应该是true,因此最好避免完全使用浮点数进行比较
//数据类型强制转换
char ca = 'a'; //char类型的值要用单引号
char cb = '中';
char cc = '\u0061'; // '\u0061' 是Unicode编码,其所对应的是字母a
System.out.println(ca);
System.out.println((int)ca); //把char类型的变量ca的值强制转换为int类型,发现打印的不是字母a了,而是输出了对应字母a的Unicode编码
System.out.println(cb); //打印出来的应该是中文'中'
System.out.println((int)cb);//把char类型的变量ca的值强制转换为int类型,发现打印的不是中文‘中’了,而是输出了对应中文'中'的Unicode编码
System.out.println(cc); //打印出来的应该是字母a
System.out.println("========================================================"); //打印一条分隔线(便于阅读程序运行结果)
boolean flag = true; //先定义布尔变量flag,用于后续进行字符串间的比较判断。
//对字符串sa和sb进行比较
String sa = "Hello world"; //注意:这里的字符串的值是在字符串常量池
System.out.println(sa); //打印结果应是Hello world
String sb = "Hello world"; //注意:这里的字符串的值是在字符串常量池
System.out.println(sb); //打印结果应是Hello world
flag = (sa == sb); //比较sa和sb,把比较结果赋值给flag
if(flag){ //比较sa和sb 两个字符串,判断结果(flag的值)应该是true。因为它们同属于一个字符串常量池,而它们的字符串内容是相同的,它们实际上是指向了同一个对象,它们的值和存储地址都是一样的。
System.out.println("sa is == sb\n"); //如果比较的结果是true,打印sa和sb是完全相等的。\n是换行。
}
else {
System.out.println("sa is not == sb\n"); //如果比较的结果是false,打印sa和sb是不完全相等的。
}
//对字符串sc和sd进行比较
String sc = "Hello\tworld"; //注意:这里的字符串的值是在字符串常量池
System.out.println(sc); //打印结果应是Hello跟着一个长度为制表符距离的空格,跟着是world
String sd = "Hello\nworld"; //注意:这里的字符串的值是在字符串常量池
System.out.println(sd); //打印结果应是Hello换行,然后world
flag = (sc == sd); //比较sc和sd,把比较结果赋值给flag
if(flag){ //比较sc和sd 两个字符串,判断结果(flag的值)应该是false。因为它们的字符串内容是不同的(一个含有制表符,一个含有换行符)。
System.out.println("sc is == sd\n"); //如果比较的结果是true,打印sc和sd是完全相等的。\n是换行。
}
else {
System.out.println("sc is not == sd\n"); //如果比较的结果是false,打印sc和sd是不完全相等的。
}
//对字符串se和sf进行比较
String se = new String("Hello world"); //new一个字符串hello world,赋值给字符串变量se。注意:这个new出来的值是在堆内存,会分配新的内存地址
System.out.println(se); //打印字符串变量se的值
String sf = new String("Hello world"); //new一个字符串hello world,赋值给字符串变量sf。注意:这个new出来的值是在堆内存,会分配新的内存地址
System.out.println(sf); //打印字符串变量sf的值
flag = (se == sf); //比较se和sf,把比较结果赋值给flag
if(flag){ //比较se和sf两个字符串,判断结果(flag的值)应该是false。因为它们被分配到了不同的存储地址,指向的是两个不同的对象,所以尽管它们有相同的值,却不完全相同。
System.out.println("se is == sf\n"); //如果比较的结果是true,打印se和sf是完全相等的。\n是换行。
}
else {
System.out.println("se is not == sf\n"); //如果比较的结果是false,打印se和sf是不完全相等的。
}
}
}