Java String问题

问题描述

JAVA中String类以形参传递到函数里面,修改后外面引用不能获取到更改后的值

示例代码

public class Temp {
    String str = "good";
    Integer integerParam = 1000;
    Double doubleParam = 2D;
    Long longParam = 1L;
    char[] chars = {'a', 'b', 'c'};

    public void change(Long longParam,
                       Double doubleParam,
                       Integer integerParam,
                       String str,
                       char[] chars) {
        str = "test";
        integerParam = 200000;
        longParam = 10L;
        doubleParam = 3D;
        chars[0] = 'd';
    }

    public static void main(String[] args) {
        Temp temp = new Temp();
        System.out.println("执行方法之前");
        System.out.println("temp.str:" + temp.str);
        System.out.println("temp.integerParam:" + temp.integerParam);
        System.out.println("temp.doubleParam:" + temp.doubleParam);
        System.out.println("temp.longParam:" + temp.longParam);
        System.out.println("temp.chars:"+new String(temp.chars));
        System.out.println();

        temp.change(temp.longParam, temp.doubleParam, temp.integerParam, temp.str, temp.chars);
        System.out.println("执行方法之后");
        System.out.println("temp.str:" + temp.str);
        System.out.println("temp.integerParam:" + temp.integerParam);
        System.out.println("temp.doubleParam:" + temp.doubleParam);
        System.out.println("temp.longParam:" + temp.longParam);
        System.out.println("temp.chars:"+new String(temp.chars));
    }
}

输出结果如下

执行方法之前
temp.str:good
temp.integerParam:1000
temp.doubleParam:2.0
temp.longParam:1
temp.chars:abc

执行方法之后
temp.str:good
temp.integerParam:1000
temp.doubleParam:2.0
temp.longParam:1
temp.chars:dbc

原因

String类的存储是通过final修饰的char[]数组来存储数据的,不可更改。所以当每次外部一个String类型的引用传递到方法内部时候,只是把外部String类型变量的引用传递给了方法参数变量。外部String变量和方法参数变量都是实际char[]数组的引用而已。所以当在方法内部改变这个参数的引用时候,因为char[]数组不可改变,所以每次新建变量都是新建一个新的String实例。很明显外部String类型变量没有指向新的String实例。所以也就不会获取到新的改变。

下面程序例程假定tString指向A内存空间,A内存空间存放了”hello”这个字符串,然后调用modst函数将tString引用赋值给了text引用,注意是引用。确实是传址,我们知道String是不可变的,任何进行更改的操作都会产生新的String实例。所以在方法里面text指向了B空间,B空间存放了”sdf” 字符串,但是这个时候tString还是指向A空间,并没有指向B空间。

public static String modst(String text) {
    return text = "sdf";
}
    String tString = "hello";
    System.out.println(tString);
    //改变text指向
    modst(tString);
    System.out.println(tString);

总结一下三句话

  1. 对象是传引用
  2. 原始类型是传值
  3. String、Integer、Double、Short、Byte等immutable类型因为没有提供自身修改的函数,每次操作都是新生成一个对象,所以要特殊对待。可以认为是传值。

Integer和String一样,保存value的类变量是final属性,无法被修改,只能被重新赋值/生成新的对象。当Integer作为方法参数传递进方法内部时,对其的赋值将会导致原Integer的引用被指向了方法内的栈地址,失去了对原类变量地址的指向。对赋值后的Integer对象做的任何操作,都不会影响原来对象。

Linux常用命令

1. 时间date

  • 获取指定时间n天后时间
date -d "20180423 30 days " "+%Y%m%d"
  • 获取指定时间n天前时间
date -d "20180423 -30 days " "+%Y%m%d"

获取一个UUID:cat /proc/sys/kernel/random/uuid

  • tail +10 note从note文件第10行开始显示

touch可以修改指定文件的时间标签或者创建一个空文件

cat

命令 说明
cat -b note 从1开始对所有非空输出行编号
cat -n note 从1开始对所有行输出行编号
cat -s note 将多个相邻的空行合并成一个空行
cat file1 file2 > file3 将文件file1、file2合并之后放入file3中

grep

命令 说明
grep -E "[Mm]ain|[Pp]rint" note 查找包含main或者print的所有行,不管首字母大小写
grep -F nihao note 中包含“nihao”字符串的所有行
grep -c nihao note 包含“nihao”字符串的行的个数。
grep -i nihao note 查找包含‘nihao’的所有行,不区分字母大小写
grep -R nihao Pescod 在目录pescod下所有子目录中的文件中递归查找包含‘nihao’的行
grep -n nihao note 输出包含‘nihao’的所有行之前,输出行号
grep -v nihao note 只显示不包含匹配字符串的行

注意:如果在搜索模式的字符串中包含空格,需要使用单引号括起来。

diff

格式

diff [选项] file1 file2,逐行比较两个文件,列出不同之处,为了是两个文件一致,给出需要修改的行,输出格式如下:

格式 说明
n1 a n3 n4 把file1的n1行附加到file2的n3~n4行后,则二者相同
n1,n2 d n3 删除file1的n1~n2行即file2的n3行,则二者相同
n1,n2 c n3,n4 把file1的n1~n2行修改为file2的n3~n4,则二者相同

选项

选项 说明
-b 忽略空格造成的差别
-c 输出格式是带上下文的三行格式
-C n 输出格式是有上下文的n行格式
-i 忽略字母大小写的区别

cp

说明

如果源文件是普通文件,把它复制到指定的目标文件中;如果是目录,需要使用‘-r’选项,将整个目录下的所有文件盒子目录复制到目标位置。

选项

选项 说明
-a 递归的将目录下的所有文件及子目录都复制到目标目录中,并保留文件链接和文件属性不变
-r 递归复制目录
-i 在覆盖目标文件之前先给出提示,要求用户予以确认

示例

命令 说明
cp file1 /home/exam 将文件file1复制到/home/exam目录下
cp -r /home/exam /home/exam1 将/home/exam下所有文件复制到/home/exam1下面
cp -i /home/emam/m*.txt /home/exam1 交互式将/home/emam/下以m开头的所有txt文件复制到目录 /home/exam1下

rm

格式

rm [选项] 文件列表

选项

选项 说明
-f 忽略不存在的文件,不给出任何提示
-r 递归的删除指定目录及其下属的各级子目录和相应的文件
-i 交互式删除文件

mv

命令 说明
mv ex2 new1 将文件ex2改名为new1
mv /home/* . 将/home/中的所有文件移动到当前目录

wc

说明

统计指定文件的字节数、字数、行数

选项

选项 说明
-c 统计字节数
-l 统计行数
-w 统计字数

示例

命令 说明
wc -lcw file1 统计文件file1中的字节数、字数、行数
wc file1 统计文件file1中的字节数、字数、行数

mkdir

选项 说明
-m 将新建目录的存取权限设置为mode,存取权限用给定的八进制数字表示
-p 一次建立多个目录,如果新建目录所指定的路径中有些父目录不存在,则自动创建
示例 说明
mkdir --mode=700 /home/pescod/test 在目录/home/pescod/下建立test文件夹,并且只有文件主有读写和执行的权限,其他用户没有
mkdir -p -m 750 bin/so1 在当前目录下创建bin和在bin下创建so1文件夹,文件主可读写执行,同组用户可以读和执行,其他用户无权访问

Linux安装WordPress

Linux上安装WordPress

一、WordPress介绍

  • WordPress是一个基于PHP的开源博客系统。它起源于2003年,是目前世界上最流行的开源博客系统。
  • WordPress可以搭建功能强大的网络信息发布平台,但更多的是应用于个性化的博客。

二、准备工作

三、安装

1.使用wget下载

wget https://wordpress.org/latest.zip

2.解压

  • 移动到指定目录
mv latest.zip /opt/php_web_site/
  • 解压生成wordpress目录
unzip latest.zip

四、WordPress配置

1.数据库配置

A.进入MySQL

mysql -u root -p

B.创建wordpress数据库

create database wordpress;

C.为WordPress创建一个新用户

create user wordpress@localhost identified by 'wordpresspwd';

D.设置权限,只可以操作本数据库(本数据库的所有权限)

grant all privileges on wordpress.* to wordpress@localhost identified by 'wordpresspwd';

E.将权限生效

flush privileges;

2.配置WordPress连接数据库信息

  1. 登录服务器进入wordpress目录
  2. 创建wp-config.php文件
cp wp-config-sample.php wp-config.php
  1. 填写数据库信息
vim wp-config.php
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'wordpress');

/** MySQL database password */
define('DB_PASSWORD', 'wordpresspwd');

/** MySQL hostname */
define('DB_HOST', 'localhost');

开启80端口

1.服务器开启80端口

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

2.阿里云服务器开启80端口

配置Nginx

1.添加wordpress配置文件

A.创建目录
mkdir sites-available
mkdir sites-enabled
B.创建配置文件
cd sites-available
vim wordpress.conf

添加如下内容

server {
 listen 80;
 error_log  /var/log/nginx/www.domain.com/error.log warn;
 access_log /var/log/nginx/www.domain.com/access.log ;
 server_name 39.105.67.180;
 index index.html index.htm index.php;
 root /opt/php_web_site/wordpress;
 location / {
   try_files $uri $uri/ /index.php$args;
 }

 location ~ \.php$ {
  fastcgi_pass 127.0.0.1:9000;
  ## With php5-fpm:
  #fastcgi_pass unix:/var/run/php5-fpm.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME /opt/php_web_site/wordpress$fastcgi_script_name;
  include fastcgi_params;
 }
}
C.引入配置文件
  • 进入sites-enabled目录创建软连接
ln -s ../sites-available/wordpress.conf wordpress.conf
  • 在nginx.conf的http块中添加
include sites-enabled/*.conf;

五、WordPress安装

在浏览器中输入域名或者IP进行安装